tp3.2.3許可權控制二之後臺管理部分,及選單欄目顯示問題
上篇記錄了一下許可權控制部分的實現過程,以及實現的程式碼。但那些只是實現了簡單的許可權控制,具體的後臺當然要有使用者的管理,使用者組的管理,規則管理等。這篇主要是寫後臺部分,和上篇湊成一個完整的環。
一、使用者管理,以及許可權管理部分
1、管理員管理
這部分是比較簡單的,需要注意的是,新增管理員的時候,要新增對應的分組資訊。
2、許可權管理
這部分是對應許可權組的列表資訊。在新增管理員的時候,要同時往auth_group_access表中加上管理員對應的許可權組。可以考慮使用資料庫的事務。
3、新增和修改許可權組對應的許可權
在新增許可權組的時候,我們需要選擇賦予的許可權。這裡是把所有控制器對應的方法都給列出來,超級管理員可以選擇賦予普通管理員許可權。
這裡需要注意,超級管理員是許可權最大的,不要限制超級管理員。
二、左邊的選單顯示方式
就像之前說的,我們需要根據使用者對應的許可權來顯示選單欄目。如果使用者沒有對應的許可權,我們就不顯示該欄目。
1、線查詢使用者對應的所有規則id,也就是控制器方法的id
function getRules($adminId)
{
$ruleArr = M('smj_admin')->where('id='."'$adminId'")->find();
$type = $ruleArr['type'];
$ruleStr1 = M('smj_auth_group')->where('id=' ."'$type'")->find();
$ruleStr = $ruleStr1['rules'];
//var_dump($ruleStr);
$ruleArr = explode(',',$ruleStr);
return $ruleArr;
}
這個方法是寫在Common控制器的,作為一個公用方法。根據傳過來的使用者id,查詢對應的瑞澤資訊,並且轉化成陣列。
2、把獲取到的規則陣列傳遞給檢視,在檢視頁進行判斷
我這裡就是採用最笨的方法。把每個列表頁在規則表中對應的id,專門找出來。然後判斷這個列表頁的id在不在使用者對應的許可權陣列中。在的話就顯示,不在的話就不顯示。
比如這個圖片,我使用者資訊在auth_rule表中對應的id是12,那我就判斷一下,這個12在不在使用者的許可權陣列中。
以上配合上第一篇文章,基本就完成一個閉環。注意把所有的方法,包括JS非同步請求的方法,都加入到auth_rule表中。這樣就基本OK了。
我這邊做的比較簡單。如果有更好的方案或者問題,請留言,謝謝。
end