許可權 角色
如題。。。
在複雜的使用權限設定面前,直接手寫if、else我覺得應該是不行了吧
求教思路
回複討論(解決方案)
在建表的時候就該有許可權表,角色的一個屬性外部索引鍵關聯這個表
在建表的時候就該有許可權表,角色的一個屬性外部索引鍵關聯這個表
可否說的再詳細一些呢?主要是 寫程式時 應該在哪一個環節來引入這個許可權判斷 如何引入
以前寫過個小項目也是許可權問題,我們是這樣解決的:當使用者登入時就把使用者的資訊(包括許可權,我那時許可權用的是數字。假如該使用者權限為5)存在session中,當該他要做某個操作時比如刪除(許可權要求要>6),比較當前許可權和要求許可權的大小....太遙遠了 記不太清楚了
一般身份識別(登入)後就引入角色到session,然後根據角色查表得到許可權
表設計:角色關聯菜單(一級菜單~二級菜單……),角色關聯操作(查看,刪除,搜尋,修改)
先確定許可權字的表示和儲存
php 的整型數為 logn 類型,具有64個二進位位。
因此,足以滿足大多數應用的需求。(每個二進位位表示一個動作)
每個角色具有一個許可權字,每個使用者可以具有多個角色
每個使用者還可以擁有一個例外許可權字
綜合許可權採用位元運算求出:
使用者權限 = 角色許可權 xor 例外
其中:角色許可權 = 使用者隸屬角色許可權 or 使用者隸屬角色許可權 ...
角色<->許可權;許可權<->菜單
先確定許可權字的表示和儲存
php 的整型數為 logn 類型,具有64個二進位位。
因此,足以滿足大多數應用的需求。(每個二進位位表示一個動作)
每個角色具有一個許可權字,每個使用者可以具有多個角色
每個使用者還可以擁有一個例外許可權字
綜合許可權採用位元運算求出:
使用者權限 = 角色許可權 xor 例外
其中:角色許可權 = 使用者隸屬角色許可權 or 使用者隸屬角色許可權 ...
感謝。 關於許可權的儲存和分配說的非常清楚
那具體在調用時怎麼使用呢?
比如現在有一個 刪除 按鈕
具有刪除許可權的角色們查看這個頁面時可以看到這個按鈕, 該怎麼寫? 用if、else嗎?
點擊刪除按鈕後提交到PHP 還需要再次判斷許可權嗎?
條件判斷總是必要的,不然如何知道誰是誰?
不過也很簡單
$u = 0b1011; //使用者權限
$p = 0b0010; //動作號(前面我已經講了可以有64種動作)
if($p & $u) echo '有許可權';
找一下RBAC設計模式
使用者表關聯使用者組表,使用者組表關聯許可權表,當使用者進入的時候,先判斷屬於哪個組,然後根據組設定許可權,很多開源產品都這麼設計的。
簡單的的 角色儲存好每個方法, 使用這個方法時 判斷這個使用者角色是否有這個方法許可權
RBAC許可權模式就可以 這些網上一大堆,自己可以查查