存取控制过滤器ACF
use yii\web\Controller;
use yii\filters\AccessControl;
class SiteController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['login', 'logout', 'signup'], // only 中没有列出的动作,将无条件获得授权
'rules' => [
[
'allow' => true, // 获得授权
'actions' => ['login', 'signup'], // 表示可以访问的动作
'roles' => ['?'], // '?'表示访客用户
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['@'], // '@' 表示已认证用户
],
],
],
];
}
// ...
}
当 ACF 判定一个用户没有获得执行当前动作的授权时,它的默认处理是:
- 如果该用户是访客,将调用 [yii\web\User::loginRequired()] 将用户的浏览器重定向到登录页面。
- 如果该用户是已认证用户,将抛出一个 [yii\web\ForbiddenHttpException] 异常。
你可以通过配置 [yii\filters\AccessControl::$denyCallback] 属性定制该行为:
[
'class' => AccessControl::className(),
...
// 定制的回调函数
'denyCallback' => function ($rule, $action) {
throw new \Exception('You are not allowed to access this page');
}
]