YII開發技巧分享——控制器中動作許可權控制

來源:互聯網
上載者:User
在YII開發中,我們可以通過控制器中對accessRules函數的配置進行相應動作許可權控制,預設情況下可能是這樣:
public function accessRules()
    {
        ……
            array('allow',
                'actions'=>array('admin','delete'),
                'users'=>array('admin'),
            ),
            array('deny', 
                'users'=>array('*'),
            ),
        );
    }
       在函數中可以配置具體哪些使用者可以訪問某些動作,但是在開發過程中我們很容易會發現上面有的幾個方式完全不夠用,於是不約而同地就會相對這個能不能訪問的規則是否能讓我們自訂了,答案是肯定的,確實可以自訂。
       具體方法是這樣的(主要是用到accessRules中的expression屬性):
       在accessRules函數體中:
return array(
            array('allow',
                'actions'=>array('admin'),
                'expression'=>array($this,'getadvancedusers'),
            ),
            ……
        );
       沒錯就是這一句“ 'expression'=>array($this,'advancedusers')”,我想相信接下來大家就很清楚了,就是在這個控制器中添加一個advancedusers函數(該函數名自己可以根據自己的需要修改),函數如下:
    public function advancedusers()
    {
        $users=Users::model()->findByAttributes(array('uid'=>Yii::app()->user->id));

        return ($users->ugid == 1);//看目前使用者的使用者組ID是否為1(我這裡1代表進階使用者)


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,delete               'actions'=>array('admin','delete'),               'users'=>array('admin'),           ),           array('deny',  // 禁止所有使用者操作               'users'=>array('*'),           ),       );   } 

    }
       這裡返回一個bool值,返回0代表檢查不通過,就是說沒有訪問admin這個動作的許可權。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.