Access Control Filter(ACF) :访问控制过滤器,是一个简单的鉴权方法,很适合只需要简单访问控制的应用程序使用。ACF 是一个动作过滤器,可以被当做一个行为附属到一个控制器或一个 module 中。ACF 将通过检测访问规则集合(access rules)来确定用户是否可以访问被请求的动作。
use app\libraries\filters\AccessControl;
class Base extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['login','logout'],
'allowCallback'=>function($rule,$action){
if ($action->controller->id!="login"){
$this->getBaseUserInfo();
}
},
'rules' => [
[
// 设置 actions 的操作是允许访问还是拒绝访问
'allow' => true,
// 当前 rule 将会针对这里设置的 actions 起作用,如果为空,则默认对当前 controller 的所actions 起作用
'actions'=>['logout'],
// @ 当前规则针对认证过的用户, ?所有用户均可访问
'roles' => ['@'],
],
[
'allow' => true,
// 'controllers' => ['login'],
'actions' => ['login'],
'roles' => ['?'],
],
],
],
];
}
}
上面的实例代码,ACF 被作为行为附属到 Base 控制器中。这是动作过滤器最常用的使用方式。only
选项指定这个 ACF 只能被应用于login
,logout
动作。rules
选项指定访问规则 (access rules):
- 允许所有 guest(未认证的)访问
login
动作。roles
选项包含的这个问号?
,是用来表示"guests"的特俗符号。 - 允许认证用户来访问
logout
动作。@
字符是用来表示认证用户的符号。