yii 許可權分級式訪問控制的實現 非RBAC法

2021-06-12 13:06:01 字數 4805 閱讀 7297

yii framework 提供了2套許可權訪問系統,一套是簡單的filter(過濾器)模式,另一套是複雜全面的rbac模式,我這裡要講的是第一套(因為我也剛剛學到這裡)。如 果你有研究過yii官方的demo blog,一定知道,比如,由gii自動生成的user模組,自動附帶了簡單的filter許可權分配功能,具體細節請參照blog手冊的「使用者驗證」一章 節,以及yii官方指南的「驗證和授權」一章節。(注意,我這裡所指的模組,只是我個人對與user有關的檔案的統稱,與yii檔案系統的模組 (module)含義不同。) 

關於許可權分配的檔案大多在controllers裡,比如開啟usercontroller.php檔案你會看到2個類函式。 

01publicfunctionfilters()

02

08

09publicfunctionaccessrules()//這裡就是訪問規則的設定。

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

06classwebuserextendscwebuser

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

21functionisadmin()

28

29// load user model.

30protectedfunctionloaduser($id=null)

31

37return$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?

01publicfunctionaccessrules()//這裡就是訪問規則的設定。     {

02returnarray(

03array('allow',// 允許所有使用者執行index,view動作。

04'actions'=>array('index','view'),

05'users'=>array('*'),//*號標識所有使用者包括註冊的、沒註冊的、一般的、管理員級的

06),

07array('allow',// 只允許經過驗證的使用者執行create, update動作。

08'actions'=>array('create','update'),

09'users'=>array('@'),// @號指所有註冊的使用者

10),

11array('allow',// 只允許使用者名稱是admin的使用者執行admin,delete動作

12'actions'=>array('admin','delete'),

13'expression'=>,

14//這樣只有標識為「管理員」的使用者才能訪問admin,delete動作

15),

16array('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 事件編寫過濾函式,如果用...