天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

深入解析yii權限分級式訪問控制的實現(非RBAC法)

yii framework 提供了2套權限訪問系統,一套是簡單的filter(過濾器)模式,另一套是復雜全面的RBAC模式,我這里要講的是第一套(因為我也剛剛學到這里)。如 果你有研究過YII官方的demo blog,一定知道,比如,由gii自動生成的user模塊,自動附帶了簡單的filter權限分配功能,具體細節請參照blog手冊的“用戶驗證”一章 節,以及yii官方指南的“驗證和授權”一章節。(注意,我這里所指的模塊,只是我個人對與user有關的文件的統稱,與yii文件系統的模塊 (module)含義不同。)
關于權限分配的文件大多在controllers里,比如打開UserController.php文件你會看到2個類函數。
復制代碼 代碼如下:
public function filters()
     {
      return array(
       'accessControl',               // 實現CRUD操作的訪問控制。
       'postOnly + delete',
         );
     }

 public function accessRules()              //這里就是訪問規則的設置。
     {
      return array(
         array('allow',              // 允許所有用戶執行index,view動作。
           'actions'=>array('index','view'),
           'users'=>array('*'), <span></span>          
           ),                   
         array('allow',             // 只允許經過驗證的用戶執行create, update動作。
            'actions'=>array('create','update'),
            'users'=>array('@'),       // @號指所有注冊的用戶
             ),
         array('allow',             // 只允許用戶名是admin的用戶執行admin,delete動作
             'actions'=>array('admin','delete'),
             'users'=>array('admin'),
             ),                   //admin就是指用戶名是admin的用戶,以硬編碼的形式分配用戶權限。
             array('deny',           // 拒絕所有的訪問。
             'users'=>array('*'),
             ),
         );
     }

關于更多的訪問規則的設定請參照官方文件http://www.yiiframework.com/doc/api/1.1/CAccessControlFilter
好了,現在要開始按照我們自己的需求設置適合自己的權限分配了。我們希望filter訪問控制模式能更完美一點,按照常識,我們希望它能按照數據庫里user表里不同級別用戶,實行不同的授權,而不是用硬編碼的形式控制。

回到demo blog,我先對數據庫的tbl_user表做修改,在原來的基礎上加上role一項。對原來的用戶信息記錄添加role的value為"管理員"或"一般用戶"。
然后依次執行以下3個步驟:
1. 創建組件WebUser,它是對CWebUser的擴展。
2. 修改config/main.php文件。
3.修改accessRules()。
具體細節如下:
1.WebUser.php 組件代碼:
復制代碼 代碼如下:
<strong><?php

 // this file must be stored in:
 // protected/components/WebUser.php

 class WebUser extends CWebUser {

   // Store model to not repeat query.
   private $_model;

   // Return first name.
   // access it by Yii::app()->user->first_name
   function getFirst_Name(){
     $user = $this->loadUser(Yii::app()->user->id);
     return $user->first_name;
   }

   // This is a function that checks the field 'role'
   // in the User model to be equal to 1, that means it's admin
   // access it by Yii::app()->user->isAdmin()
   function isAdmin(){
     $user = $this->loadUser(Yii::app()->user->id);
     if ($user==null)
         return 0;
     else
         return $user->role == "管理員";
   }

   // Load user model.
   protected function loadUser($id=null)
     {
         if($this->_model===null)
         {
             if($id!==null)
                 $this->_model=User::model()->findByPk($id);
         }
         return $this->_model;
     }
 }
 ?></strong>

2.在config/main.php找到如下代碼,添加標紅色的代碼。
復制代碼 代碼如下:
   'components'=>array(
        'user'=>array(
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
             'class'=>'WebUser',
        ),

3.找到需要更改權限的controller類,對accessRules()函數做修改,比如對前文的accessRules()函數做如下修改:
復制代碼 代碼如下:
public function accessRules()  //這里就是訪問規則的設置。     {
     return array(
         array('allow',                     // 允許所有用戶執行index,view動作。
             'actions'=>array('index','view'),
             'users'=>array('*'),         //*號標識所有用戶包括注冊的、沒注冊的、一般的、管理員級的
         ),
         array('allow',                      // 只允許經過驗證的用戶執行create, update動作。
             'actions'=>array('create','update'),
             'users'=>array('@'),       // @號指所有注冊的用戶
         ),
         array('allow',                     // 只允許用戶名是admin的用戶執行admin,delete動作
             'actions'=>array('admin','delete'),
             'expression'=>'yii::app()->user->isAdmin()',
             //這樣只有標識為“管理員”的用戶才能訪問admin,delete動作
         ),
         array('deny',  // 拒絕所有的訪問。
             'users'=>array('*'),
         ),
     );

工作完成!

php技術深入解析yii權限分級式訪問控制的實現(非RBAC法),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 99视频导航 | 欧美精品久久久久性色AV苍井 | 麻豆婷婷狠狠色18禁久久 | 99视频精品全部免费观看 | 色综合久久久久久 | 最新无码二区日本专区 | 男人桶女人j的视频在线观看 | 久久精品麻豆国产天美传媒果冻 | 九九热精品视频在线观看 | MD传媒在线观看佳片 | 欧美18精品久久久无码午夜福利 | 精品国产国产精2020久久日 | 男人舔女人的阴部黄色骚虎视频 | 久草在在线免视频在线观看 | 精品国产人成亚洲区 | 2017必看无码作品 | 9久久99久久久精品齐齐综合色圆 | 午夜向日葵高清在线观看 | 综合色中色| 国产ts调教| 久久综合丁香激情久久 | 无人区乱码区1卡2卡三卡在线 | 小草视频免费观看在线 | 国语自产精品一区在线视频观看 | 绞尽奶汁by菊花开 | 国产亚洲精品久久久999无毒 | 成人天堂资源WWW在线 | 99久久无码一区人妻A片竹菊 | 超碰在线视频地址 | 亚洲mv在线观看 | 国产国产成年在线视频区 | 被黑人做的白浆直流 | 亚洲精品国产在线网站 | 99久久免费热在线精品 | 兽交白浆喷水高潮 | 国产精品久久久久久52AVAV | 色综合久久中文色婷婷 | 泡妞高手在都市免费观看 | 亚洲精品成人a在线观看 | 超碰人热人人热人人看 | 啊轻点啊再深点视频免费 |