不同用户角色的yii ACL
这个问题可能是基本的,以前也有人问过,但我找不到。 我使用的是Yii,在区分使用action访问的用户时遇到了麻烦。 我有一个名为tbl_user的表,其中包含用户名、密码和角色等字段。用户登录时,系统将根据其角色设置登录状态,例如:不同用户角色的yii ACL,yii,acl,Yii,Acl,这个问题可能是基本的,以前也有人问过,但我找不到。 我使用的是Yii,在区分使用action访问的用户时遇到了麻烦。 我有一个名为tbl_user的表,其中包含用户名、密码和角色等字段。用户登录时,系统将根据其角色设置登录状态,例如: $role = "Super User"; //assume we get this role by querying the tbl_user Yii::app()->user->setState("loginAs", $role) 在控制器中,有
$role = "Super User"; //assume we get this role by querying the tbl_user
Yii::app()->user->setState("loginAs", $role)
在控制器中,有4个操作,actionIndex、actionCreate、actionUpdate和actionDelete。如果超级用户登录,这4个操作将可用。但是,如果另一个用户具有不同的角色登录,例如管理员,则除了actionDelete之外,其他所有用户都将可用。我试过这个:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('index','create','update','delete'),
'expression'=>'Yii::app()->user->getState("loginAs")=="Super User"'
),
array('allow',
'actions'=>array('index','create','update'),
'expression'=>'Yii::app()->user->getState("loginAs")=="Administrator"',
),
);
}
编辑
上面的代码不起作用。当我以管理员身份登录时,所有4个操作都会出现错误403。管理员应该能够访问除“删除”之外的所有内容。还有别的办法吗?任何帮助都将不胜感激。来自
按照访问规则的顺序逐个评估访问规则
明确规定。与当前模式匹配的第一条规则,例如。
用户名、角色、客户端IP、地址决定授权
后果如果该规则是允许规则,则可以执行该操作;如果
这是一个拒绝规则,无法执行该操作;如果没有任何规则
如果与上下文匹配,则仍然可以执行该操作
因此,您应该将可以在单个表达式中执行操作的所有角色组合在一起,即
array('allow',
'actions'=>array('index','create','update'),
'expression'=>'in_array(Yii::app()->user->getState("loginAs"),array("Super User","Administrator",...))'
),
array('allow',
'actions'=>array('delete'),
'expression'=>'Yii::app()->user->getState("loginAs")=="Super User"'
),
另外,如果您遵循上面的链接,您将看到如何在Yii中实现RBAC。这可以将您的代码简化为
array('allow',
'actions'=>array('index','create','update'),
'roles'=>array("Super User","Administrator"),
),
还要确保在控制器筛选器中启用了accessControl
public function filters()
{
// ...
return array('accessControl',);
}
echo Yii::app->user->getStateloginAs;然后检查值。但根据您的代码,这不意味着管理员也可以访问actionDelete吗?管理员应该无法访问它。抱歉,也许我的问题不够清楚,我已编辑了它。我已更新了答案。您应该查看链接以了解更多信息。谢谢托弗,它很有效。注意到了链接,我们将进一步研究它。