Yii2 第4章 ACF Yii2 第4章 ACF

2022-06-27

一、什么是 ACF

Access control filter —— 存取控制过滤器,是一种通过 yii\filters\AccessControl 类来实现的简单授权方法, 非常适用于仅需要简单的存取控制的应用。

二、Yii2 中的 ACF

public function behaviors()
{
    return [
        "access" => [
            "class" => AccessControl::className(),
            //only 选项指明 ACF 应当只 对 login, logout 和 signup 方法起作用
            "only" => ["login", "logout", "signup"],
            "rules" => [
                [
                    "allow" => true,
                    "actions" => ["login", "signup"],
                    "roles" => ["?"],
                ],
                // 允许认证用户
                [
                    "allow" => true,
                    "actions" => ["logout"],
                    //@ 是一个特殊标识, 代表"已认证用户"。
                    //? 是另一个特殊的标识,代表"访客用户"
                    "roles" => ["@"],
                ],
            ],
        ],
        //指定该规则用于匹配哪种请求方法(例如GET,POST)。 这里的匹配大小写不敏感
        "verbs" => [
            "class" => VerbFilter::className(),
            "actions" => [
                "logout" => ["post"],
            ],
        ],
    ];
}

三、自定义过滤器

①、ACF 如何工作

ACF 自顶向下逐一检查存取规则,直到找到一个与当前 欲执行的操作相符的规则。

然后该匹配规则中的 allow 选项的值用于判定该用户是否获得授权。如果没有找到匹配的规则, 意味着该用户没有获得授权

②、ACF 处理未授权操作

当 ACF 判定一个用户没有获得执行当前操作的授权时,它的默认处理是:

如果该用户是访客,将调用 yii\web\User::loginRequired() 将用户的浏览器重定向到登录页面。

如果该用户是已认证用户,将抛出一个 yii\web\ForbiddenHttpException 异常。

你可以通过配置 yii\filters\AccessControl::denyCallback 属性定制该行为。

③、自定义过滤器

https://file.lulublog.cn/images/3/2022/08/QHv0PfXIa60LPQXXah82B0hxPqplpv.png

阅读 622