Yii2 RBAC检查权限,没有控制器中的每个操作

时间:2016-02-15 19:18:06

标签: php oop yii2

如何在一个地方查看权限?
我不想单独检查每个功能。

我的RBAC控制器。 我想检查登录用户对控制器中所有操作的权限。现在,我必须分别对控制器中的每个操作使用Yii::$app->user->can('...')

$admin = $auth->createRole('Admin');
$moderator = $auth->createRole('Moderator');

$createPost=$auth->createPermission('createPost');
$updatePost=$auth->createPermission('updatePost');
$deletePost=$auth->createPermission('deletePost');
$createCategory=$auth->createPermission('createCategory');
$updateCategory=$auth->createPermission('updateCategory');
$deleteCategory=$auth->createPermission('deleteCategory');


$auth->add($admin);
$auth->add($moderator);
$auth->add($createPost);
$auth->add($updatePost);
$auth->add($deletePost);
$auth->add($createCategory);
$auth->add($updateCategory);
$auth->add($deleteCategory);

这里我为角色分配权限,但我从不使用这些权限,因为在行为中手动编写>(就像你的例子)

什么是目标,在RBAC中创建权限,如果这不起作用?如果我想添加高级用户。我只能在控制器中添加动作,例如actionPremium并为高级用户设置行为操作。

例如

行动=> [ '溢价'] 角色=> [ 'premiumUser']

还有一个问题。 如何在行为中自定义消息错误?

$auth->addChild($admin,$moderator);
$auth->addChild($admin,$createCategory);
$auth->addChild($admin,$updateCategory);
$auth->addChild($admin,$deleteCategory);
$auth->addChild($moderator, $createPost);
$auth->addChild($moderator, $updatePost);
$auth->addChild($moderator, $deletePost);


$auth->assign($admin,1);
$auth->assign($moderator,2);

1 个答案:

答案 0 :(得分:4)

您可以为行为中的所有操作分配控制器中允许的权限

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['index','view'], // these action are accessible 
                                                   //only the yourRole1 and yourRole2
                    'allow' => true,
                    'roles' => ['yourRole1', 'yourRole2'],
                ],
                [    // all the action are accessible to superadmin, admin and manager
                    'allow' => true,  
                    'roles' => ['superAdmin', 'admin', 'manager'],
                ],   
            ],
        ],        
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
    ];
}

您在行为中指定的角色是行动..允许或拒绝..如果某个角色在行为中有允许的行为,那么他可以执行,否则他会获得拒绝权限403 ..(未经授权)..

您还可以使用

检查程序代码中的角色
if ( Yii::$app->User->can('admin') ){
    .....
    yourdCode
    ....
}