Menu Close

Yii 简单权限验证

假设你知道filters是什么意思。
假设你知道accessControl是什么意思。
filters是过滤器,
public function filters()
{
return
array( 'accessControl'),
// 多个
}

这就是一个过滤器,accessControl是过滤器实现的一个默认方法。
1:假设你的user表里有role字段。
在protected/components/UserIdentity.php   //默认这个文件有验证登陆成功与否。
在验证成功后加入$this->setState('roles', $roles);   //类似与session  设置roles的数值
2:默认情况下,配置文件中user组件默认使用CWebUser。
在components新建文件  WebUser.phpaccessRules
class WebUser extends CWebUser   //继承CwebUser
增加验证方法



/*
这里的roles 就是下面的第一个参数
public function accessRules()
{
return array(
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('index','view','create','update','Shipping','mobile'),
'users'=>array('admin'),
),
array(
'allow',
'actions'=>array('index','view','create','update','Shipping','mobile'),
'roles'=>array('ident',)
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
*/
public function checkAccess($operation, $params=array()) {
if (empty($this->id)) {
return false;如果为空,验证失败
}
$role = $this->getState("roles");  //获取用户role的值
if ($role === 'admin') {
return true; // 如果是admin 全pass
}
return ($operation === $role); }
在config中制定user组件使用的类
'components' => array( // ... 'user' => array( 'class' => 'WebUser', ),
检查权限: 使用
在你的 PHP 代码中使用 Yii::app()->user->checkAccess('admin') 来检查当前用户是否有 ‘admin’ 角色。当用户拥有 "staff" 或 "admin" 角色时,调用 Yii::app()->user->checkAccess("staff") 将会返回 true。
在控制器中你可以使用 accessRules() 中的 "roles" 属性进行过滤。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注