在yii中新增一个用户验证的方法详解(2)


public function filterAccessControl($filterChain) 

    $filter=new CAccessControlFilter; 
    $filter->setRules($this->accessRules()); 
    $filter->filter($filterChain); 
}


在里面新建了一个CAccessControlFilter实例,并且在setRules时传入了accessRules()方法返回的参数.
$filter->filter($filterChain)则是继续调用其它filter.
而所有具体的授权规则则是定义在accessRules中:
Php代码

复制代码 代码如下:


public function accessRules() 
    { 
        return array( 
            array('deny', 
                'actions'=>array('create', 'edit'), 
                'users'=>array('?'), 
            ), 
            array('allow', 
                'actions'=>array('delete'), 
                'roles'=>array('admin'), 
            ), 
            array('deny', 
                'actions'=>array('delete'), 
                'users'=>array('*'), 
            ), 
        ); 
    }


具体规则参见yii的手册.
3.新增一个验证体系:
首先我们从CWebUser继承一个CAdminUser:
Php代码

复制代码 代码如下:


class CAdminWebUser extends CWebUser 

    public $loginUrl = array('admin/admin/login'); 
}


我们需要把他放置到components中
如果是全局应用则通过protected/config/main.php的components小节:
Php代码

复制代码 代码如下:


'user'=>array( 
    // enable cookie-based authentication 
        'class' => 'CAdminUser', 
    'allowAutoLogin'=>true, 
       'loginUrl' => array('site/login'), 
),


如果是在modules中则在模块类的init方法中添加如下代码:
Php代码

复制代码 代码如下:


$this->setComponents(array( 
       'adminUser' => array( 
                'class' => 'CAdminWebUser', 
                'allowAutoLogin' => false, 
        ) 
));


最后调用方式
Php代码

复制代码 代码如下:


//全局应用 
Yii::app()->getComponent('adminUser'); 
//在模块中 
Yii::app()->controller->module->getComponent('adminUser');


但仅仅这样还不够,我们还需要修改Controller的filter,我们需要自定义一个filter,来实现另一个用户的验证和授权
第一步自定义一个filter:
Php代码

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a9f16b24470752c9e259c2a957f2fb92.html