欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Yii2的rbac怎么关联某一个具体的action,有人有例子吗?

程序员文章站 2022-04-25 22:58:16
...
看到Yii::$app->authManager->createPermission('createPost')就可以创建createPost权限了;
然后再分配给某个用户,该用户就拥有这个权限了。
我认为'createPost'应该仅仅是权限的名字而已,事实上他也许对应一个logout操作(假设)。那么Yii怎么把权限和具体的action关联起来的呢?
是不是要配合AccessColtrol来使用呢?如果是,那要这个permission有什么意义呢?直接给role不就可以了?
求指教。3Q first~

回复内容:

看到Yii::$app->authManager->createPermission('createPost')就可以创建createPost权限了;
然后再分配给某个用户,该用户就拥有这个权限了。
我认为'createPost'应该仅仅是权限的名字而已,事实上他也许对应一个logout操作(假设)。那么Yii怎么把权限和具体的action关联起来的呢?
是不是要配合AccessColtrol来使用呢?如果是,那要这个permission有什么意义呢?直接给role不就可以了?
求指教。3Q first~

正好做到做鉴权判断这块,我给你解答。

AccessColtrol 这种是一种形式

index、view 两个动作就是能通过AccessColtrol来判断了

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['index', 'view', 'create', 'update'],
            'rules' => [
                [
                    'actions' => ['index'], //来宾可见
                    'allow' => true,
                    'roles' => ['?'],
                ],
                [
                    'actions' => ['view', 'create', 'update'], //登录用户
                    'allow' => true,
                    'roles' => ['@'],
                ],
                [
                    'actions' => ['create', 'update'], //Post请求
                    'allow' => true,
                    'verbs' => ['POST']
                ],
            ],
        ],
    ];
}

public function actionIndex()
{
    return '来宾可见';
}

public function actionView()
{
    echo '登录用户可见:'."\n";
    return Yii::$app->user->identity->id;
}
  

使用Rbac,放在各自的方法里

优点是使用灵活,缺点是每次都要写相识的代码

public function actionCreate()
{
    if (Yii::$app->user->can('CreatePost')) {
        return '可以的';
    } else {
        throw new UnauthorizedHttpException('对不起,您现在还没获此操作的权限。');
    }
}

public function actionUpdate()
{
    if (Yii::$app->user->can('UpdatePost')) {
        return '可以的';
    } else {
        throw new UnauthorizedHttpException('对不起,您现在还没获此操作的权限。');
    }
}

使用Rbac,放在beforeAction这个方法里

正好跟上面一点相反,要根据请求的动作来判断哪个权限

public function beforeAction($action) {
    if (parent::beforeAction($action)) {
        //print_r($action); // 权限名字传递过去(CreatePost)
        if (!Yii::$app->user->can('CreatePost')) {
            throw new UnauthorizedHttpException(Yii::t('yii', '对不起,您现在还没获此操作的权限'));
        }
        return true;
    } else {
        return false;
    }
}

最后给你参考资料:http://www.yiichina.com/doc/guide/2.0/security-authorization

[该用户已被屏蔽]被屏蔽是什么意思啊?

Javascript局部变量有没有属性描述符

相关标签: yii2 php