Yii2的rbac怎么关联某一个具体的action,有人有例子吗?
程序员文章站
2022-05-14 16:58:26
...
看到Yii::$app->authManager->createPermission('createPost')就可以创建createPost权限了;
然后再分配给某个用户,该用户就拥有这个权限了。
我认为'createPost'应该仅仅是权限的名字而已,事实上他也许对应一个logout操作(假设)。那么Yii怎么把权限和具体的action关联起来的呢?
是不是要配合AccessColtrol来使用呢?如果是,那要这个permission有什么意义呢?直接给role不就可以了?
求指教。3Q first~
然后再分配给某个用户,该用户就拥有这个权限了。
我认为'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局部变量有没有属性描述符
上一篇: php自己实现memcached的队列类
下一篇: 浅谈java常用的几种线程池比较