ホームページ  >  記事  >  バックエンド開発  >  Yii 認証ロールベースのアクセス制御 (RBAC)

Yii 認証ロールベースのアクセス制御 (RBAC)

步履不停
步履不停オリジナル
2019-06-29 17:49:592713ブラウズ

Yii 認証ロールベースのアクセス制御 (RBAC)

1: 基本概念

ロールは権限の集合です (例: 投稿の作成、投稿の変更)。ロールは 1 人以上のユーザーに割り当てることができます。ユーザーが特定の権限を持っているかどうかを確認するために、システムは、その権限を含むロールがユーザーに割り当てられているかどうかを確認します。

ルール ルールを使用して、ロールまたは権限に関連付けることができます。ルールはコードで表され、ユーザーがこのロールまたは権限を満たしているかどうかを確認するときにルールの実行が実行されます。たとえば、「投稿の変更」権限では、ユーザーが投稿の作成者であるかどうかを確認するルールを使用できます。権限チェック中に、ユーザーが投稿作成者ではない場合、そのユーザーは「投稿を変更する」権限を持っていないと見なされます。

ロールと権限はどちらも階層的に編成できます。場合によっては、ロールが他のロールまたは権限で構成され、さらに他のロールまたは権限が他の権限で構成される場合があります。 Yii は、より具体的なツリーレベルを含む、いわゆるローカル順序階層を実装します。ロールには権限を含めることができますが、その逆はできません。 (翻訳者注: ロールが一番上にあり、権限が一番下にあることが理解できます。権限が上から下にある場合、ロールはさらに下に表示されません)

2: RBAC の設定

はじめに 認可データを定義してアクセスチェックを実行する前に、アプリケーションコンポーネント yiibaseApplication::authManager を設定する必要があります。 Yii は、yiirbacPhpManager と yiirbacDbManager という 2 つの認可マネージャーのセットを提供します。前者は PHP スクリプトを使用して認証データを保存し、後者はデータベースを使用して認証データを保存します。アプリケーションが多数の動的なロールと権限の管理を必要としない場合は、前者の使用を検討してください。

1: yiirbacPhpManager を使用します

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\PhpManager',
        ],        // ...
    ],
];

設定が完了したら、Yii を使用できます。 :$app-> ;authManager にアクセスするには、authManager

yiirbacPhpManager は、デフォルトで RBAC データを @app/rbac ディレクトリ内のファイルに保存します。アクセス許可レベルのデータが実行時に変更される場合は、WEB サーバー プロセスがディレクトリとそのディレクトリ内のファイルに対する書き込みアクセス許可を持っていることを確認してください。

2: yiirbacDbManager を使用する

(1) yiirbacDbManager を設定する

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\DbManager',            // uncomment if you want to cache RBAC items hierarchy
            // 'cache' => 'cache',
        ],        // ...
    ],
];

ここに注意してください:

Yii の基本テンプレートを使用している場合は、上記の設定を行います。 config/console.php と config/web.php ファイルの両方で設定する必要があります。Yii の高度なテンプレートの場合は、common/config/main.php ファイルで 1 回設定するだけで済みます。

(2) 必要な権限テーブルを生成する

yiirbacDbManager を使用する場合、権限データを保存するために 4 つのデータベース テーブルを生成する必要があります (これらはすべてデフォルトのテーブル名を持っています。テーブル名を変更する必要がある場合は、 yiirbacDbManager を構成します (必要に応じて変更します)

itemTable: このテーブルには承認エントリ (翻訳者注: ロールと権限) が保存されます。デフォルトのテーブル名は "auth_item" です。

itemChildTable: このテーブルには、認可エントリの階層関係が格納されます。デフォルトのテーブル名は「auth_item_child」です。
assignmentTable: このテーブルには、ユーザーへの認可エントリの割り当てが保存されます。デフォルトのテーブル名は「auth_assignment」です。
ruleTable: このテーブルにはルールが保存されます。デフォルトのテーブル名は「auth_rule」です。

プロジェクトディレクトリで実行

yii merge --migrationPath=@yii/rbac/migrations


上記コマンド実行後、今回は上記の 4 つのテーブルがデータベースに生成されます。

Yii 認証ロールベースのアクセス制御 (RBAC)

#詳細コマンドを使用してデータベースを生成しない場合は、vendoriisoftyii2rbacmigrationsschema-mysql の内容を変更できます。 SQL それをデータベースにコピーし、実行してデータ テーブルを生成します。

対応する権限テーブルを生成した後、Yii::$app->authManager を使用して authManager にアクセスできます

3:認可データの確立

1: 権限の追加 (作成) (auth_item テーブルに権限データを生成、タイプは 2 で権限を示します)

$auth = Yii::$app->authManager;// 添加 "createPost" 权限$createPost = $auth->createPermission('createPost');
$createPost->description = '创建了createPost权限';
$auth->add($createPost);

2: ロールの作成 (auth_item にロール データを生成)テーブル、タイプが 1 はロールを意味します)

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');
$role->description = '创建了author角色';
$auth->add($role);

3: ロールに権限を付与します

(1)ロールに指定された権限を付与します

$auth = Yii::$app->authManager;
$createPost = $auth->createPermission('createPost');//创建权限对象
$role = $auth->createRole('author');//创建角色对象
$auth->addChild($role, $createPost); //添加对应关系(给author角色添加createPost权限)

(2)ロールを付与します指定されたロールのすべての権限

$auth = Yii::$app->authManager;
$role1 = $auth->createRole('author1');//创建角色对象
$role2 = $auth->createRole('author2');//创建权限对象
$auth->addChild($role1, $role2); //添加对应关系(给author1角色添加author2角色所有权限)

4: ユーザーにロールを割り当てる

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');//创建角色对象$auth->assign($role, 1); #1是IdentityInterface::getId()返回的id,及用户表的id

4: 権限を確認する

\Yii::$app->user->can($action) #$action表示权限\Yii::$app->user->can('createPost') #判断用户是否具有createPost权限

ユーザーのロールを取得する

$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($userId);

Getユーザーの権限

$auth = Yii::$app->authManager;
$roles = $auth->getPermissionsByUser($userId);

上記はロールベースのアクセス制御 (RBAC) の簡単な理解です。詳細については、Yii の公式ドキュメントを参照してください

以上がYii 認証ロールベースのアクセス制御 (RBAC)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。