共计 1419 个字符,预计需要花费 4 分钟才能阅读完成。
假设你知道 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" 属性进行过滤。