yii 2権限管理の使い方~
3730 ワード
ACF:アクセス制御フィルタアクセス制御フィルタ(ACF)は、yifiltersAccessControlクラスによって実装される簡単なライセンス方法です.使用方法について説明します. 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コンフィギュレーションを追加する方法について簡単に説明します.
yiirbacDbManager:$itemTable:このテーブルには、認可エントリ(ロールと権限)が格納されます.デフォルトのテーブル名は「auth_item」です.yiirbacDbManager:$itemChildTable:このテーブルには、認可エントリの階層関係が格納されます.デフォルトのテーブル名は「auth_item_child」です..yirbacDbManager:$assignmentTable:このテーブルには、ユーザーに対する認可エントリの割り当てが格納されます.デフォルトのテーブル名はauth_assignmentです.yirbacDbManager:$ruleTable:このテーブルはルールを格納します.デフォルトのテーブル名はauth_ruleです.
これらのテーブルをデータベースに作成する必要があります.@yii/rbac/migrationsディレクトリに格納されているデータベース移行ファイルを使用して、このことを行うことができます.認証手順は次のとおりです.
ロールと権限の定義
ロールと権限の関係定義ルールを確立し、ルールとロールと権限を関連付けてロールをユーザーに割り当てます.
具体的には、次のコードを実装します.
public function behaviors()
{
return [
'access' => [
'class' => yii\filters\AccessControl::className(),
'rules' => [
[
'allow' => true,
'actions' => ['create', 'update', 'view', 'delete'],
'roles' => ['@'],
],
[
'allow' => true,
'actions' => ['index'],
'roles' => ['?'],
],
],
],
];
}
'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, , 。