标签: yii2-rbac

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获得反馈?

rbac yii2 yii2-rbac

5
推荐指数
1
解决办法
266
查看次数

如何更改/更新用户角色?Yii2

我正在使用基于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.

我怎样才能做到这一点?

yii2-user yii2-rbac yii2-user-roles

5
推荐指数
1
解决办法
5023
查看次数

将 yii2 RBAC 与规则类一起使用时,如何控制 yii2 GridView 的 ActionColumn 中按钮的可见性?

我了解 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)

yii2 yii2-basic-app yii2-rbac

5
推荐指数
1
解决办法
6871
查看次数

配置Yii2中的多个用户标识

我开发了一个有两个不同注册的站点,我有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)

当我这样做时,显示此错误 在此处输入图像描述

谢谢!

yii2 yii2-rbac

3
推荐指数
1
解决办法
3671
查看次数