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」です。
$auth = Yii::$app->authManager;// 添加 "createPost" 权限$createPost = $auth->createPermission('createPost'); $createPost->description = '创建了createPost权限'; $auth->add($createPost);
$auth = Yii::$app->authManager; $role = $auth->createRole('author'); $role->description = '创建了author角色'; $auth->add($role);
$auth = Yii::$app->authManager; $createPost = $auth->createPermission('createPost');//创建权限对象 $role = $auth->createRole('author');//创建角色对象 $auth->addChild($role, $createPost); //添加对应关系(给author角色添加createPost权限)
$auth = Yii::$app->authManager; $role1 = $auth->createRole('author1');//创建角色对象 $role2 = $auth->createRole('author2');//创建权限对象 $auth->addChild($role1, $role2); //添加对应关系(给author1角色添加author2角色所有权限)
$auth = Yii::$app->authManager; $role = $auth->createRole('author');//创建角色对象$auth->assign($role, 1); #1是IdentityInterface::getId()返回的id,及用户表的id
\Yii::$app->user->can($action) #$action表示权限\Yii::$app->user->can('createPost') #判断用户是否具有createPost权限
$auth = Yii::$app->authManager; $roles = $auth->getRolesByUser($userId);
$auth = Yii::$app->authManager; $roles = $auth->getPermissionsByUser($userId);
以上がYii 認証ロールベースのアクセス制御 (RBAC)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。