热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

看到Yii::$app->authManager->createPermission('createPost')就可以创建createPost权限了;然后再分配给某个用户,该用户就拥有这个权限了。我认为'createPost'应该仅仅是权限的名字而已,事实上他也许...
看到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局部变量有没有属性描述符

推荐阅读
author-avatar
laladuosahdaj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有