yii framework 提供了2套許可權訪問系統,一套是簡單的filter(過濾器)模式,另一套是複雜全面的rbac模式,我這裡要講的是第一套(因為我也剛剛學到這裡)。如 果你有研究過yii官方的demo blog,一定知道,比如,由gii自動生成的user模組,自動附帶了簡單的filter許可權分配功能,具體細節請參照blog手冊的「使用者驗證」一章 節,以及yii官方指南的「驗證和授權」一章節。(注意,我這裡所指的模組,只是我個人對與user有關的檔案的統稱,與yii檔案系統的模組 (module)含義不同。)
關於許可權分配的檔案大多在controllers裡,比如開啟usercontroller.php檔案你會看到2個類函式。
01
public
function
filters()
02
08
09
public
function
accessrules()
//這裡就是訪問規則的設定。
10
關於更多的訪問規則的設定請參照官方檔案
好了,現在要開始按照我們自己的需求設定適合自己的許可權分配了。我們希望filter訪問控制模式能更完美一點,按照常識,我們希望它能按照資料庫裡user表裡不同級別使用者,實行不同的授權,而不是用硬編碼的形式控制。
回到demo blog,我先對資料庫的tbl_user表做修改,在原來的基礎上加上role一項。對原來的使用者資訊記錄新增role的value為"管理員"或"一般使用者"。
然後依次執行以下3個步驟:
1. 建立元件webuser,它是對cwebuser的擴充套件。
2. 修改config/main.php檔案。
3.修改accessrules()。
具體細節如下:
1.webuser.php 元件**:
01
<?php
02
03
// this file must be stored in:
04
// protected/components/webuser.php
05
06
class
webuser
extends
cwebuser
17
18
// this is a function that checks the field 'role'
19
// in the user model to be equal to 1, that means it's admin
20
21
function
isadmin()
28
29
// load user model.
30
protected
function
loaduser(
$id
=null)
31
37
return
$this
->_model;
38
}
39
}
40
?>
2.在config/main.php找到如下**,新增標紅色的**。
'components'=>array(
'user'=>array(
// enable cookie-based authentication
'allowautologin'=>true,
'class'=>'webuser',),
3.找到需要更改許可權的controller類,對accessrules()函式做修改,比如對前文的accessrules()函式做如下修改:
view source
print?
01
public
function
accessrules()
//這裡就是訪問規則的設定。 {
02
return
array
(
03
array
(
'allow'
,
// 允許所有使用者執行index,view動作。
04
'actions'
=>
array
(
'index'
,
'view'
),
05
'users'
=>
array
(
'*'
),
//*號標識所有使用者包括註冊的、沒註冊的、一般的、管理員級的
06
),
07
array
(
'allow'
,
// 只允許經過驗證的使用者執行create, update動作。
08
'actions'
=>
array
(
'create'
,
'update'
),
09
'users'
=>
array
(
'@'
),
// @號指所有註冊的使用者
10
),
11
array
(
'allow'
,
// 只允許使用者名稱是admin的使用者執行admin,delete動作
12
'actions'
=>
array
(
'admin'
,
'delete'
),
13
'expression'
=>
,
14
//這樣只有標識為「管理員」的使用者才能訪問admin,delete動作
15
),
16
array
(
'deny'
,
// 拒絕所有的訪問。
17
'users'
=>
array
(
'*'
),
18
),
19
);
工作完成!
yii 使用DB實現rbac 許可權控制
rbac 中文名稱 基於角色的許可權控制 先說後台 首先是建立許可權和角色 然後是使用我們 的使用者表 給角色分配許可權 給使用者分配角色 前台 首先 根據我們的使用者id 查詢出這個人都有什麼角色 接下來 跟據我們的角色id 查出這些角色所擁有的許可權。把這些許可權寫到乙個陣列裡 然後,獲取當前操...
Yii 框架的Rbac 許可權控制
自 xmlife 的部落格 1.首先我們要在配置檔案的元件 component 裡面配置一下 rbac php view plain copy authmanager class yii rbac dbmanager itemtable auth item assignmenttable auth ...
jsf的訪問許可權控制 控制訪問頁面 思路
把可以訪問的頁面位址 url 儲存到資料庫中,使用者登入後把他們存放到乙個陣列中,然後擴充套件jsf的phaselistener類,在這個擴充套件類中 假如叫listener.securityphaselistener afterphase phaseevent event 事件編寫過濾函式,如果用...