JAva web権限管理


以前のプロジェクトはspring 4+security 3による権限管理を採用し、共通のユーザー-ロール、ロール-リソースを採用して権限を管理していました.しかし、役割に依存しすぎて、粗粒度であり、バイナリ権限管理を採用し、自分で構築することにした.
   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     ;