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
动作。@
字符是用来表示认证用户的符号。