关于AccessControl下方的这个需求应该如何实现呢?

新手提问 · xjdata · 于 3年前 发布 · 2581 次阅读

大家好

请问如下的需求应该如何使用AccessControl 实现呢? controller中有三个方法。

  1. hello
  2. name
  3. delete

用户有2个

  1. admin [rbac中分配了3个方法]
  2. user [rbac中 只有 hello]

需求:

  1. 所有未登录用户不能访问任何方法
  2. 登录用户中 根据rbac的授权 来访问。

不知道如何实现呢?

我现在使用 beforeaction 来判断rbac的权限,但是 使用了 beforeaction 之后 我设置的VerbFilter 对 delete方法的post过滤就失效了。 注释beforeaction后 是正常的。

这是我现在的 behaviors配置 但是无法实现 2个已登录用户的 权限区别。

public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['post'],
                ],
            ],
            'access' => [
                'class' => \yii\filters\AccessControl::className(),
                //'only' => ['hello',],
                'rules' => [
                    [
                        'allow' => false,
                        'roles' => ['?'],
                    ],
                ],
            ],
        ];
    }

手册中 AccessControl类 有方法beforeAction 说明是 在所有的过滤之后 在执行之前的最后一个判断的时间了,我感觉比较适合我现在的情况,但是水平太菜,不知道如何去配置AccessControl类的beforeAction 。

请问该如何使用AccessControl 简洁优雅的实现我的需求呢?

共收到 1 条回复
forecho#13年前 0 个赞

可以去看 GetYii 的源码:

public function behaviors()
{
    return [
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'delete' => ['post'],
            ],
        ],
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                // 默认只能Get方式访问
                ['allow' => true, 'actions' => ['view', 'index', 'search'], 'verbs' => ['GET']],
                // 登录用户才能提交评论或其他内容
                ['allow' => true, 'actions' => ['api', 'view', 'delete'], 'verbs' => ['POST'], 'roles' => ['@']],
                // 登录用户才能使用API操作(赞,踩,收藏)
                ['allow' => true, 'actions' => ['create', 'update', 'revoke', 'excellent'], 'roles' => ['@']],
            ]
        ],
    ];
}
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册