[英]PHP: Manage roles with math?
我曾經看過一篇關於如何使用特定類型的編號系統來管理角色的文章。 將為用戶分配特定的角色編號,並且根據計算,該編號可以代表多個角色。
任何人都可以與我分享這項技術或分享鏈接嗎? 謝謝!
這是一個位掩碼。 它的工作方式如下:您為每個角色分配一個漸進式數字,然后當您想要為用戶分配一個角色時,您可以選擇該角色的編號。 如果要添加其他角色,只需將該角色編號添加到原始角色即可。 您可以根據需要添加任意數量的角色。 訣竅在於你如何選擇數字:它們是2的冪。
這是一個例子:
Role: Editor. Value: 2^0 = 1 Role: Manager. Value: 2^1 = 2 Role: Supervisor. Value: 2^2 = 4 Role: Admin. Value: 2^3 = 8 ...
要為用戶提供編輯器的角色,請將1保存到數據庫中。要為用戶提供編輯器,管理員和管理員的角色,請保存1 + 2 + 8 = 11
如果您將其視為1或0值的數組,您可以看到它的工作原理。
|__|__|__|__|__|__| 16 8 4 2 1
每個角色在相應的插槽中為1。 所以我們的11個案例是:
|__|__|_1|_0|_1|_1| 16 8 4 2 1
如果您有位掩碼,並且想要知道用戶是否具有某個角色,則使用此操作:
(bitmask&role_value)> = 1
例如:
(11和8)> = 1? 是的,所以用戶具有管理員角色
(11&4)> = 1? 不,所以用戶沒有主管角色
它被稱為位掩碼,因為你正在做的是“檢查特定位置是否有1”,即“應用一個掩碼(設置為0)所有位置,除了你是尋找):
11 --> |__|__|_1|_0|_1|_1| 16 8 4 2 1 8 --> |__|__|_1|_0|_0|_0| (mask) 16 8 4 2 1 AND -> |__|__|_1|_0|_0|_0| Result: Yes
希望它有幫助:)
我想你聽說過“比特旗”。 我不知道這是一個很好的英語版(我是德國人) - 但我認為谷歌會給你一些不錯的鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.