Yii2基本的访问控制AccessControl

作者: php 发布时间: 2019-08-22 浏览: 2536 次 编辑

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