JAva web権限管理
以前のプロジェクトはspring 4+security 3による権限管理を採用し、共通のユーザー-ロール、ロール-リソースを採用して権限を管理していました.しかし、役割に依存しすぎて、粗粒度であり、バイナリ権限管理を採用し、自分で構築することにした.
1依然として組織概念を採用しているが、同時にユーザーを保持している
2資源は組織に権限を与えることができて、ユーザーに権限を与えることができて、権限は読み書きを区別します
3ユーザーは複数の組織で
4ユーザー権限組織権限の上書き
次に、2進法のアルゴリズムの説明を示します.
1依然として組織概念を採用しているが、同時にユーザーを保持している
2資源は組織に権限を与えることができて、ユーザーに権限を与えることができて、権限は読み書きを区別します
3ユーザーは複数の組織で
4ユーザー権限組織権限の上書き
次に、2進法のアルゴリズムの説明を示します.
// url
(url) mysql
1、
, , , :
00000001 1,
00000010 2,
00000100 4,
00001000 8;
, , “ ”, , 00000011 3, 。
Long userrolevalue ;// , ,
Long oprolevalue ;// , ,
2、 ( )
userrolevalue = userrolevalue | oprolevalue
u1, 0(00000000)。 , 4(00000100), 1。
,userrolevalue = 0 | 4 , 4, u1 、 、 ,
userrolevalue = 0 | 1 00000000 | 00000001 = 00000001
userrolevalue = 1 | 2 00000001 | 00000010 = 00000011
userrolevalue = 3 | 4 00000011 | 00000100 = 00000111
, 1、2、3 1 , “ ” , , , " " , , :
userrolevalue = 7 | 4 00000111 | 00000100 = 00000111
3、 ( 、 )
userrolevalue = userrolevalue & (~oprolevalue)
u1, 7(00000111), 、 、 。 , , 00000101, 00000010, , , 00000010 , 11111101, 00000111 , 00000101, , , 。
, , , , , 。
4、 ( )
(userrolevalue & oprolevalue) != 0 oprolevalue
: User 6(00000110), &( ) , "(User & ) != 0" ----6 & 2 == 2 (00000110 & 00000010 == 00000010), User ;6 & 4 !=0 (00000110 & 00000100 == 00000100) , User ;6 & 1 == 0(00000110 & 00000001 == 00000000), User ;