国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - Yii中srbac權限擴展模塊工作原理與用法分析

Yii中srbac權限擴展模塊工作原理與用法分析

2021-02-04 16:29dreamzml PHP教程

這篇文章主要介紹了Yii中srbac權限擴展模塊工作原理與用法,結合實例形式分析了srbac模塊的原理及權限操作的相關技巧,需要的朋友可以參考下

本文實例講述了Yii中srbac權限擴展模塊工作原理與用法。分享給大家供大家參考,具體如下:

1. 設置權限規則表:可放在module模塊配置文件里面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function init() {
  //操作權限表,必須存在以下字段:
  //itemname角色名/ID,
  //type授權項目類型/1(任務)或者2(角色),
  //bizrule權限/邏輯運算表達式為false是有權限操作,
  //data數據/YII暫無利用
  Yii::app()->authManager->itemTable = 'AuthItem';
  //會員組-權限對應表,必須存在以下字段:
  //child子角色/ID,
  //parent父角色/ID,此表可循環執行,可多級繼承
  Yii::app()->authManager->itemChildTable = 'uthItemChild';
  //會員-會員組對應表,會員組可直接為操作名稱,必須存在以下字段:
  //itemname角色名/ID,
  //userid用戶名/ID,
  //bizrule權限/邏輯運算表達式為false是有權限操作,
  //data數據/YII暫無利用
  Yii::app()->authManager->assignmentTable = 'zd_mem_glog';

2. 實現規則,所在控制器繼承基類SBaseController,原來為Controller

?
1
2
3
4
5
6
7
8
class ProductController extends SBaseController
{
    ........
}
class SBaseController extends Controller
{
    ........
}

3. SBaseController繼承基類Controller,前填加beforeAction,實現權限驗證。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
protected function beforeAction($action) {
  //載入模塊分隔符
 $del = Helper::findModule('srbac')->delimeter;
 //取得前模塊名稱
 $mod = $this->module !== null ? $this->module->id . $del : "";
 $contrArr = explode("/", $this->id);
 $contrArr[sizeof($contrArr) - 1] = ucfirst($contrArr[sizeof($contrArr) - 1]);
 $controller = implode(".", $contrArr);
 $controller = str_replace("/", ".", $this->id);
 // 生成靜態頁面 模塊+分隔符+控制器(首字母大寫)+方法(首字母大寫)例: model-ControllerAction
 if(sizeof($contrArr)==1){
  $controller = ucfirst($controller);
 }
 $access = $mod . $controller . ucfirst($this->action->id);
 //驗證訪問頁面地址是否在總是允許列表里面,是返回有權限
 if (in_array($access, $this->allowedAccess())) {
  return true;
 }
 //驗證SRBAC有無安裝,沒在安裝,返回的權限訪問
 if (!Yii::app()->getModule('srbac')->isInstalled()) {
  return true;
 }
 //驗證SRBAC有無開啟,沒在開啟,返回的權限訪問
 if (Yii::app()->getModule('srbac')->debug) {
  return true;
 }
  // 權限驗證
 if (!Yii::app()->user->checkAccess($access) || Yii::app()->user->isGuest) {
  $this->onUnauthorizedAccess();
 } else {
  return true;
 }
}

4. CDbAuthManager讀取當前用戶角色

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public function getAuthAssignments($userId)
{
  $rows=$this->db->createCommand()
    ->select()
    ->from($this->assignmentTable)
    ->where('userid=:userid', array(':userid'=>$userId))
    ->queryAll();
  $assignments=array();
  foreach($rows as $row)
  {
    if(($data=@unserialize($row['data']))===false)
      $data=null;
    $assignments[$row['itemname']]=new CAuthAssignment($this,$row['itemname'],$row['userid'],$row['bizrule'],$data);
  }
  return $assignments;
}

5. CDbAuthManager讀取角色對應權限

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public function getAuthItem($name)
{
  $row=$this->db->createCommand()
    ->select()
    ->from($this->itemTable)
    ->where('name=:name', array(':name'=>$name))
    ->queryRow();
  if($row!==false)
  {
    if(($data=@unserialize($row['data']))===false)
      $data=null;
    return new CAuthItem($this,$row['name'],$row['type'],$row['description'],$row['bizrule'],$data);
  }
  else
    return null;
}

6. CDbAuthManager讀取權限對應操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
protected function checkAccessRecursive($itemName,$userId,$params,$assignments)
{
  if(($item=$this->getAuthItem($itemName))===null)
    return false;
  Yii::trace('Checking permission "'.$item->getName().'"','system.web.auth.CDbAuthManager');
  if(!isset($params['userId']))
    $params['userId'] = $userId;
  if($this->executeBizRule($item->getBizRule(),$params,$item->getData()))
  {
    if(in_array($itemName,$this->defaultRoles))
      return true;
    if(isset($assignments[$itemName]))
    {
      $assignment=$assignments[$itemName];
      if($this->executeBizRule($assignment->getBizRule(),$params,$assignment->getData()))
        return true;
    }
    $parents=$this->db->createCommand()
      ->select('parent')
      ->from($this->itemChildTable)
      ->where('child=:name', array(':name'=>$itemName))
      ->queryColumn();
    foreach($parents as $parent)
    {
      if($this->checkAccessRecursive($parent,$userId,$params,$assignments))
        return true;
    }
  }
  return false;
}

7. CAuthManager驗證權限

?
1
2
3
4
public function executeBizRule($bizRule,$params,$data)
{
  return $bizRule==='' || $bizRule===null || ($this->showErrors ? eval($bizRule)!=0 : @eval($bizRule)!=0);
}

8. 總是充許訪問規則設置

希望本文所述對大家基于Yii框架的PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 网站av| 亚洲精品第一区在线观看 | 日韩免费在线观看视频 | 精品久久精品 | 91日韩精品一区二区三区 | 91视视频在线观看入口直接观看 | 激情综合网址 | 亚洲日本视频 | 日韩欧美国产精品 | 国产一区二区三区久久 | 欧美精品99| 日本99精品 | 日韩电影一区二区在线观看 | 日韩欧美一区二区三区在线观看 | 国产精品99久久 | 在线观看成人国产 | 北条麻妃99精品青青久久主播 | 香蕉av影院 | 久久精品日产第一区二区三区 | 久久午夜羞羞影院免费观看 | 国产成人精品久久二区二区91 | 欧美成人一区二免费视频软件 | 亚洲九九| 日韩不卡一区二区三区 | 成人在线二区 | 91视频 - 88av | 国产精品中文字幕在线 | 91丝袜| 中文字幕日韩视频 | 亚洲视频在线播放 | 国产精品久久久久久久午夜片 | 99热在线观看免费 | 成人福利在线 | 色网站在线观看 | 国产欧美综合一区二区三区 | 久久精品香蕉 | 五月天狠狠爱 | 天天天干夜夜夜操 | 天天干天天搞天天射 | 五月天婷婷综合 | 日韩欧美高清视频 |