yii 2権限管理の使い方~

3730 ワード

ACF:アクセス制御フィルタアクセス制御フィルタ(ACF)は、yifiltersAccessControlクラスによって実装される簡単なライセンス方法です.使用方法について説明します.
    public function behaviors()
    {
        return [
            'access' => [
                'class' => yii\filters\AccessControl::className(),
                    'rules' => [
                        [
                            'allow' => true,
                            'actions' => ['create', 'update', 'view', 'delete'],
                            'roles' => ['@'],
                        ],
                        [
                            'allow' => true,
                            'actions' => ['index'],
                            'roles' => ['?'],
                        ],
                    ],
            ],
        ];
    }
  • rules:array a list of access rule objects or configuration arrays for creating the rule objects.
  • If a rule is specified via a configuration array, it will be merged with [[ruleConfig]] first
  • before it is used for creating the rule object.
  • では、すべての訪問者(認証されていないユーザー)がindex操作を実行できます.rolesオプションに含まれる疑問符?は、「訪問者ユーザー」を表す特殊な識別です.
  • は、認証されたユーザがcreate update view delete操作を実行することを許可する.@は、「認証されたユーザー」を表す別の特殊なIDです.
  • ロール・ベースのアクセス制御(RBAC)では、データベース・ストレージ認可データを使用してコンフィギュレーション・ファイルweb.phpにcomponentコンフィギュレーションを追加する方法について簡単に説明します.
    'components' => [
        ......
        'authManager' => [   
                     'class' => 'yii\rbac\DbManager',    
                     'itemTable' => 'auth_item',    
                     'assignmentTable' => 'auth_assignment',    
                     'itemChildTable' => 'auth_item_child',
                ],
    ]
    DbManagerは、4つのデータベーステーブルを使用してデータを格納します.
    yiirbacDbManager:$itemTable:このテーブルには、認可エントリ(ロールと権限)が格納されます.デフォルトのテーブル名は「auth_item」です.yiirbacDbManager:$itemChildTable:このテーブルには、認可エントリの階層関係が格納されます.デフォルトのテーブル名は「auth_item_child」です..yirbacDbManager:$assignmentTable:このテーブルには、ユーザーに対する認可エントリの割り当てが格納されます.デフォルトのテーブル名はauth_assignmentです.yirbacDbManager:$ruleTable:このテーブルはルールを格納します.デフォルトのテーブル名はauth_ruleです.
    これらのテーブルをデータベースに作成する必要があります.@yii/rbac/migrationsディレクトリに格納されているデータベース移行ファイルを使用して、このことを行うことができます.認証手順は次のとおりです.
    ロールと権限の定義
    ロールと権限の関係定義ルールを確立し、ルールとロールと権限を関連付けてロールをユーザーに割り当てます.
    具体的には、次のコードを実装します.
    public function actionAccess()
        {
            $auth = Yii::$app->authManager;
            //  agent  
            $agentPermission = $auth->createPermission('agent');
            $agentPermission->description = 'create agent operate permission.';
            $auth->add($agentPermission);  
            //  admin  
            $adminRole = $auth->createRole('admin');    
            $adminRole->description = 'create admin role.';    
            $auth->add($adminRole);
            //       
            $auth->addChild($adminRole, $agentPermission);
            //       
            $userId = 1;
            $auth->assign($adminRole, $userId);
        }
    ライセンスが終了すると、コントローラ要求実行前の権限判断を行うことができます.次のようになります.
        public function beforeAction($action)
        {
            if (!parent::beforeAction($action)) {
                return false;
            }
    
            if (Yii::$app->user->can(Yii::$app->controller->id)) {
                return true;
            }
    
            throw new \yii\web\UnauthorizedHttpException('    ');
        }
    Yii::$app->user->can($permissionName)
           ,yii                  ,  true false。
       true             。
       false,         ,        。