导言
我们大家在用yii2做权限验证的时候会用到 behaviors() 方法,那么这个方法到底怎么用呢?我查了下资料。总结一下
1.概念
首先要明白behaviors()是创建权限验证必不可少的方法,相当于一个拦截器。把那些没有该权限的人应用相关的方法里;
不用这个方法之前我们要在每个方法里判断,是否登录啊,是否可以访问该动作啊。这样无疑增加了代码量,又不利于我们的维护。废话不多说
例子:
public function behaviors()
{
return [
'bootstrap' => [//启动引导的相应格式
[
'class' => 'yii\filters\ContentNegotiator',
'formats' => [
'application/json' => Response::FORMAT_JSON,
'application/xml' => Response::FORMAT_XML,
],
'languages' => [
'en',
'de',
],
],
],
],
[
'class' => 'yii\filters\AjaxFilter',//验证允许ajax执行的动作
'only' => ['index'],
'errorMessage'=>'Request must be XMLHttpRequest.'//当请求不是ajax请求是输出错误信息
],
'access' => [ //behavior中的验证是否允许访问的认证类
'except'=>['login'],//login不进行访问验证
'only' => ['*'],//设置验证的动作方法‘*’,代表全部验证。
#'only'=>['index','check','Add','confirm','del']//也可以写成这样
'rules' => [//我们的验证规则,以数组形式,每一个数组代表一个验证规则
[
'allow' => false,//不允许
'roles' => ['?'],//?代表游客, @代表登录用户 如果为空,代表普遍适用。
'actions' => ['index']//设置验证的方法,因为这里的allow为false所以actions的方法都不能被游客访问。
'denyCallback'=>function($rule,$action)
{
return $this->redirect(['product/index']);
},//如果被拒绝访问,则会执行该匿名方法,该匿名方法可以获取两个值,$rule.$action
'ips'=>'192.168.*'//表示该规则适用于192.168这个ip段,如为空则表示全部都适用
],
[
'allow' => true,
'actions' => ['index', 'check', 'Add', 'Confirm'],
'roles' => ['@']
]
]
]
];
}
上面只写了一个常用的行为方式,具体的请看yii框架的API文档yii/fifters