大家好
请问如下的需求应该如何使用AccessControl 实现呢? controller中有三个方法。
用户有2个
需求:
不知道如何实现呢?
我现在使用 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 简洁优雅的实现我的需求呢?
可以去看 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' => ['@']],
]
],
];
}