一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

深入解析yii權(quán)限分級(jí)式訪問(wèn)控制的實(shí)現(xiàn)(非RBAC法)

yii framework 提供了2套權(quán)限訪問(wèn)系統(tǒng),一套是簡(jiǎn)單的filter(過(guò)濾器)模式,另一套是復(fù)雜全面的RBAC模式,我這里要講的是第一套(因?yàn)槲乙矂倓倢W(xué)到這里)。如 果你有研究過(guò)YII官方的demo blog,一定知道,比如,由gii自動(dòng)生成的user模塊,自動(dòng)附帶了簡(jiǎn)單的filter權(quán)限分配功能,具體細(xì)節(jié)請(qǐng)參照blog手冊(cè)的“用戶(hù)驗(yàn)證”一章 節(jié),以及yii官方指南的“驗(yàn)證和授權(quán)”一章節(jié)。(注意,我這里所指的模塊,只是我個(gè)人對(duì)與user有關(guān)的文件的統(tǒng)稱(chēng),與yii文件系統(tǒng)的模塊 (module)含義不同。)
關(guān)于權(quán)限分配的文件大多在controllers里,比如打開(kāi)UserController.php文件你會(huì)看到2個(gè)類(lèi)函數(shù)。
復(fù)制代碼 代碼如下:
public function filters()
     {
      return array(
       'accessControl',               // 實(shí)現(xiàn)CRUD操作的訪問(wèn)控制。
       'postOnly + delete',
         );
     }

 public function accessRules()              //這里就是訪問(wèn)規(guī)則的設(shè)置。
     {
      return array(
         array('allow',              // 允許所有用戶(hù)執(zhí)行index,view動(dòng)作。
           'actions'=>array('index','view'),
           'users'=>array('*'), <span></span>          
           ),                   
         array('allow',             // 只允許經(jīng)過(guò)驗(yàn)證的用戶(hù)執(zhí)行create, update動(dòng)作。
            'actions'=>array('create','update'),
            'users'=>array('@'),       // @號(hào)指所有注冊(cè)的用戶(hù)
             ),
         array('allow',             // 只允許用戶(hù)名是admin的用戶(hù)執(zhí)行admin,delete動(dòng)作
             'actions'=>array('admin','delete'),
             'users'=>array('admin'),
             ),                   //admin就是指用戶(hù)名是admin的用戶(hù),以硬編碼的形式分配用戶(hù)權(quán)限。
             array('deny',           // 拒絕所有的訪問(wèn)。
             'users'=>array('*'),
             ),
         );
     }

關(guān)于更多的訪問(wèn)規(guī)則的設(shè)定請(qǐng)參照官方文件http://www.yiiframework.com/doc/api/1.1/CAccessControlFilter
好了,現(xiàn)在要開(kāi)始按照我們自己的需求設(shè)置適合自己的權(quán)限分配了。我們希望filter訪問(wèn)控制模式能更完美一點(diǎn),按照常識(shí),我們希望它能按照數(shù)據(jù)庫(kù)里user表里不同級(jí)別用戶(hù),實(shí)行不同的授權(quán),而不是用硬編碼的形式控制。

回到demo blog,我先對(duì)數(shù)據(jù)庫(kù)的tbl_user表做修改,在原來(lái)的基礎(chǔ)上加上role一項(xiàng)。對(duì)原來(lái)的用戶(hù)信息記錄添加role的value為"管理員"或"一般用戶(hù)"。
然后依次執(zhí)行以下3個(gè)步驟:
1. 創(chuàng)建組件WebUser,它是對(duì)CWebUser的擴(kuò)展。
2. 修改config/main.php文件。
3.修改accessRules()。
具體細(xì)節(jié)如下:
1.WebUser.php 組件代碼:
復(fù)制代碼 代碼如下:
<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找到如下代碼,添加標(biāo)紅色的代碼。
復(fù)制代碼 代碼如下:
   'components'=>array(
        'user'=>array(
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
             'class'=>'WebUser',
        ),

3.找到需要更改權(quán)限的controller類(lèi),對(duì)accessRules()函數(shù)做修改,比如對(duì)前文的accessRules()函數(shù)做如下修改:
復(fù)制代碼 代碼如下:
public function accessRules()  //這里就是訪問(wèn)規(guī)則的設(shè)置。     {
     return array(
         array('allow',                     // 允許所有用戶(hù)執(zhí)行index,view動(dòng)作。
             'actions'=>array('index','view'),
             'users'=>array('*'),         //*號(hào)標(biāo)識(shí)所有用戶(hù)包括注冊(cè)的、沒(méi)注冊(cè)的、一般的、管理員級(jí)的
         ),
         array('allow',                      // 只允許經(jīng)過(guò)驗(yàn)證的用戶(hù)執(zhí)行create, update動(dòng)作。
             'actions'=>array('create','update'),
             'users'=>array('@'),       // @號(hào)指所有注冊(cè)的用戶(hù)
         ),
         array('allow',                     // 只允許用戶(hù)名是admin的用戶(hù)執(zhí)行admin,delete動(dòng)作
             'actions'=>array('admin','delete'),
             'expression'=>'yii::app()->user->isAdmin()',
             //這樣只有標(biāo)識(shí)為“管理員”的用戶(hù)才能訪問(wèn)admin,delete動(dòng)作
         ),
         array('deny',  // 拒絕所有的訪問(wèn)。
             'users'=>array('*'),
         ),
     );

工作完成!

php技術(shù)深入解析yii權(quán)限分級(jí)式訪問(wèn)控制的實(shí)現(xiàn)(非RBAC法),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产拳头交一区二区 | 国产大片一区 | 免费一区二区三区四区五区 | 狠狠入ady亚洲精品 狠狠色成人综合首页 | 日本三级韩国三级美三级91 | 国产手机在线播放 | 伊人网站在线 | 国产小视频在线观看免费 | 香蕉成人国产精品免费看网站 | 国产91久久精品一区二区 | 黄色在线视频观看 | 中文字幕1区2区 | 奇米一区二区 | 国产精品网站在线进入 | 日本伊人网 | 亚洲成a人片77777kkkk | 丁香婷婷激情 | 国产欧美一区二区精品性色tv | 六月激情婷婷 | jizz国产在线观看 | 男女牲交一级毛片 | 精品亚洲综合在线第一区 | 四虎国产精品永久地址99 | 国内精品小视频在线 | 9丨精品国产高清自在线看 aⅴ一区二区三区 | 加勒比一本大道在线 | 搞黄免费视频 | 午夜视频福利在线观看 | 久久婷婷色一区二区三区 | 午夜久久久久久网站 | 色成年激情久久综合 | 国产精品久久久久亚洲 | 久久久国产麻豆 | 成 人 黄 色视频免费播放 | 激情视频一区 | 久久夜色精品国产欧美 | 精品成人乱色一区二区 | 亚洲网站在线播放 | 精品视频在线观看一区二区三区 | 日本成人在线网站 | 欧美黄色免费大片 |