这是关于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获得反馈?
我正在使用基于yii2角色的访问控制(RBAC)系统.我定义了角色和权限,定义了规则,为用户分配了角色.一切正常.
但我想更新分配给用户的角色.例如:
Yii::$app->authManager->assign('admin', '11');
Run Code Online (Sandbox Code Playgroud)
在这里,我做了用户ID 11管理员.现在我想更新和更改.我想成为这个用户经理.
当我尝试:
Yii::$app->authManager->assign('manager', '11');
Run Code Online (Sandbox Code Playgroud)
此用户有admin + manager.我只想将此用户角色admin更新为manager.
我怎样才能做到这一点?
我了解 ActionColumn 按钮的可见性可以这样控制:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'title',
'body:ntext',
// ['class' => 'yii\grid\ActionColumn'],
[
'class' => 'yii\grid\ActionColumn',
'visibleButtons' =>
[
'update' => Yii::$app->user->can('updatePost'),
'delete' => Yii::$app->user->can('updatePost')
]
],
],
]);
?>
Run Code Online (Sandbox Code Playgroud)
我已经创建了 RBAC 授权,以及一个基于 yii2 文档的 AuthorRule Rule 类
http://www.yiiframework.com/doc-2.0/guide-security-authorization.html
在 roleParams 的情况下,我已经实现了如下(在视图模板中):
if (\Yii::$app->user->can('updatePost', ['post' =>$model]){
//if the post is created by current user then do this
}
Run Code Online (Sandbox Code Playgroud)
如何找出 GridView 小部件中的模型或至少 id 以便我执行以下操作:
'visibleButtons' =>
[
'update' => …Run Code Online (Sandbox Code Playgroud) 我开发了一个有两个不同注册的站点,我有2个不同的表,我使用RbacDB,并在组件部分的web配置中我有用户配置,根据这个我想知道我怎么可以使用2个不同的字段配置文件?
配置:
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => '213h2i3121h12osiajls',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
// Here after user I need to add another config user-two
'user-two' => [
'identityClass' => 'app\models\SecondUser',
'enableAutoLogin' => true,
],
Run Code Online (Sandbox Code Playgroud)
当我这样做时,显示此错误 在此处输入图像描述
谢谢!