Access Control Filter(ACF) :訪問控制過(guò)濾器衫仑,是一個(gè)簡(jiǎn)單的鑒權(quán)方法乾吻,很適合只需要簡(jiǎn)單訪問控制的應(yīng)用程序使用霹期。ACF 是一個(gè)動(dòng)作過(guò)濾器,可以被當(dāng)做一個(gè)行為附屬到一個(gè)控制器或一個(gè) module 中阶祭。ACF 將通過(guò)檢測(cè)訪問規(guī)則集合(access rules)來(lái)確定用戶是否可以訪問被請(qǐng)求的動(dòng)作。
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' => [
[
// 設(shè)置 actions 的操作是允許訪問還是拒絕訪問
'allow' => true,
// 當(dāng)前 rule 將會(huì)針對(duì)這里設(shè)置的 actions 起作用直秆,如果為空濒募,則默認(rèn)對(duì)當(dāng)前 controller 的所actions 起作用
'actions'=>['logout'],
// @ 當(dāng)前規(guī)則針對(duì)認(rèn)證過(guò)的用戶, 圾结?所有用戶均可訪問
'roles' => ['@'],
],
[
'allow' => true,
// 'controllers' => ['login'],
'actions' => ['login'],
'roles' => ['?'],
],
],
],
];
}
}
上面的實(shí)例代碼瑰剃,ACF 被作為行為附屬到 Base 控制器中。這是動(dòng)作過(guò)濾器最常用的使用方式筝野。only
選項(xiàng)指定這個(gè) ACF 只能被應(yīng)用于login
,logout
動(dòng)作晌姚。rules
選項(xiàng)指定訪問規(guī)則 (access rules):
- 允許所有 guest(未認(rèn)證的)訪問
login
動(dòng)作。roles
選項(xiàng)包含的這個(gè)問號(hào)?
遗座,是用來(lái)表示"guests"的特俗符號(hào)舀凛。 - 允許認(rèn)證用戶來(lái)訪問
logout
動(dòng)作。@
字符是用來(lái)表示認(rèn)證用戶的符號(hào)途蒋。