| 模型 | 結構 | 適用場景 |
|---|---|---|
| 用戶 + 組 + 角色 + 權限 | 四層,最靈活 | 大型企業應用、多租戶 SaaS |
| 用戶 + 組 + 權限 | 省去角色 | 中型系統、組織架構固定 |
| 用戶 + 角色 + 權限 | 無組織架構 | 項目制、扁平化團隊 |
| 用戶 + 權限 | 最簡單 | 小工具、個人博客、原型驗證 |
權限常量:READ=1 (2^0), ADD=2 (2^1), EDIT=4 (2^2), DELETE=8 (2^3)... 用戶權限值 = 位或組合:$perm = READ | ADD | EDIT; // = 7 判斷:($perm & DELETE) !== 0 → 有刪除權限 優點:極快、單整數存儲、位運算原子性、易擴展(新增權限只需新常量)。 缺點:權限數超過 64 位需大整數或多字段;無法直接表達「刪除包含閱讀」等業務邏輯(需上層代碼保證授予 READ)。
權限質數:READ=2, ADD=3, EDIT=5, DELETE=7... 用戶權限 = 乘積:$perm = 2*3*5 = 30 (READ+ADD+EDIT) 判斷:$perm % 5 === 0 → 有 EDIT 缺點:數值增長極快(幾個權限即超 64 位)、質因數分解慢、難以維護、業務邏輯同樣無法內建包含關系。不推薦生產使用。
順序固定:READ,ADD,EDIT,DELETE... 用戶權限 = '1101' (有 READ,ADD,DELETE) 擴展:在末尾追加字符,舊數據自動補 0。 優點:無位數上限、直觀可讀、易於數據庫 LIKE 查詢。 缺點:存儲空間大、字符串操作比位運算慢、需固定順序嚴格維護。
欄目權限:用戶可訪問目錄數組(如 ['news','product']) 操作權限:瀏覽/添加/修改/刪除 → 對應文件命名規則(proAddEdit.php?id=... 判斷修改) 缺點:強耦合文件結構、不支持 OOP/框架路由、難以單元測試、擴展性差。已過時。
article.create, article.update, article.delete, article.publish 等字符串標識。roles (id, name, slug) permissions (id, name, slug, description) role_permissions (role_id, permission_id) user_roles (user_id, role_id)
$this->authorize('article.update', $article)ArticlePolicy::update(User $user, Article $article) 封裝複雜業務規則(如作者本人、管理員、發布狀態)。@can('article.delete', $article) 控制 UI 顯示。位掩碼(2 的冪次)是底層存儲與判斷的最高效方案,但業務層應封裝為語義化的權限字符串/策略類。避免質數乘積、定長向量、文件耦合等反模式。現代框架(Laravel Gates/Policies、Symfony Voters、ThinkPHP Auth)已提供成熟 RBAC 實現,建議直接使用而非重複造輪子。