歡迎您光臨本站 註冊首頁

用戶、角色、許可權管理-設計方案之許可權檢測

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

用戶、角色、許可權管理-設計方案之許可權檢測

在管理軟體系統設計中,用戶、角色、許可權管理是不可缺少的三部分,三者具有如下關係:
User : Role = 1 : n
Role : Permission = 1 : n
如將許可權控制到具體的功能模塊,又有如下關係:
Role : Module : Permission = 1 : 1 : n

    UserRole的設計很直觀,就是1:n的關係表,User、Role均為主鍵。下面具體談談RolePermission的關係設計。
RolePermission完全可以採用和UserRole同樣的設計,但要求Role、Module、Permission三個主鍵,此時處理 Role : Module : Permission的 1 : 1 : n 關係,顯得有些費勁。針對於所有的功能模塊,Permission 均可劃分為以下幾種:
1. 列表/查看
2. 新增
2. 修改
4. 刪除

    我們可以將「Role : Module : Permission = 1 : 1 : n」 中的「n」想辦法變成「1」。設各許可權值分別如下(2倍等比遞增的關係):
1. 列表/查看 = 2
2. 新增 = 4
2. 修改 = 8
4. 刪除 = 16
此時的「Role : Module : Permission」中的Permission等於上述四種操作許可權中所擁有的許可權值之和,比如:若某個(Role + Module)擁有查看、新增、修改、刪除的許可權,則其Permission=2+4+8+16=30。

    下面進行許可權檢測,判斷「(Role + Module)」所對應的Permission是否包含上述四種操作許可權中的每一個。解決問題關鍵:使用「&」運算符。比如:
判斷Permission是否包含「查看」的許可權值,就用 if((Permission & 2) == 2)
判斷Permission是否包含「新增」的許可權值,就用 if((Permission & 4) == 4)
判斷Permission是否包含「修改」的許可權值,就用 if((Permission & 8) == 8)
判斷Permission是否包含「刪除」的許可權值,就用 if((Permission & 16) == 16)

    原理(轉化為二進位,進行「與」運算):
30 & 2 = 00011110 & 00000010 = 00000010
30 & 4 = 00011110 & 00000100 = 00000100
30 & 8 = 00011110 & 00001000 = 00001000
30 & 16 = 00011110 & 00010000 = 00010000

[火星人 ] 用戶、角色、許可權管理-設計方案之許可權檢測已經有342次圍觀

http://coctec.com/docs/service/show-post-2570.html