設置含有的權限如增刪改查減為1,2,4,8,16
如果A包含增刪改這5個權限,那A的值為1+2+4=7
如果B包含增改查這5個權限,那A的值為1+4+8=13
如果C包含增刪改查減這5個權限,那A的值為1+2+4+8+16=31
7二進制為111,13的二進制為1101,31二進制為11111
1二進制為1,2二進制為10,4二進制為100,8二進制為1000,16二進制為10000,
可以得出:
7&1=1,7&2=2,7&4=4,7&8=0,7&16=0
13&1=1,13&2=0,13&4=4,13&,8=8,13&16=0
13&1=1,13&2=2,13&4=4,13&,8=8,13&16=16
假設一個用戶U有角色A,角色A的權限值為7,用7循環與2的N次方相與,值大于0表示有該權限
假設一個用戶U有角色B,角色A的權限值為13,用13循環與2的N次方相與,值大于0表示有該權限
這樣就可以查出U所包含的所有權限,這個時候沒有一級菜單和二級菜單之分
?
如果一個用戶有多個角色,一個角色有一級菜單權限和部分二級菜單權限,數據庫應該怎么設計呢?
那么在角色表里面需要配置一個一級級菜單的值(如新增用戶1,修改用戶為2,刪除用戶為3),配一個二級菜單的總值(如7,13,31),然后在權限值表里面配置二級菜單的值(如增刪改查減為1,2,4,8,16)以及對應的一級菜單的值(如新增用戶1,修改用戶為2,刪除用戶為3)
角色表字段
角色? ?父菜單值? 二級菜單總值
A? ? ? ? 1? ? ? ? ? ?7
A? ? ? ? 2? ? ? ? ? ?13? ??
B? ? ? ? 2? ? ? ? ? ?31
權限表字段
父菜單? 二級菜單值
1? ? ? ? ? ? 1
1? ? ? ? ? ? 2
1? ? ? ? ? ? 4
1? ? ? ? ? ? 8
2? ? ? ? ? ? 1
2? ? ? ? ? ? 4
3? ? ? ? ? ? 8
3? ? ? ? ? ? 16
?