mae*_*mae 5 rbac yii2 yii2-rbac
这是关于Yii2中RBAC使用的问题.
到目前为止,我发现它工作得相当好和令人满意,但是我缺少一个关键功能:Yii2规则能够以与Yii2 Validators设置错误消息类似的方式提供"反馈",以解释验证失败的原因.我正在寻找一种方法来提供某种反馈,说明为什么没有授予许可.
特别是,can()方法将返回一个布尔类型,这很好,但是在检查权限时,我们不知道为什么用户没有被授予该特定权限.
举一个更实际的例子.假设我们正在尝试确定当前用户是否可以提交评论.我们通常会这样做:
if (Yii::$app->user->can('postComment',['comment'=>$comment])) {
$comment->post();
} else {
throw new ForbiddenHttpException('Sorry m8, you cant do this. No idea why tho!');
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是如示例所示,我们真的不知道为什么用户无法发表评论.可能有多种原因,例如因为线程被锁定或者因为他们没有在某个类别中发布的权限,或者因为他们没有足够高的声誉等等.但我们想告诉用户原因!所以我的问题是,我们如何从Yii2的RBAC获得反馈?
您可能希望创建自己的 AccessRule 并通过覆盖该类中的当前方法来设置场景中的消息异常。matchRole将是您要重写的方法。Yii2 没有这个功能,所以你必须推出自己的 AccessRule 才能做到这一点。
然后,一旦创建,将其附加到您的控制器:
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'ruleConfig' => [
'class' => 'app\components\AccessRule'
],
'rules' => [
/* my normal rules */
],
],
];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |