Heim > Artikel > Backend-Entwicklung > Yii-Autorisierung rollenbasierte Zugriffskontrolle (RBAC)
1: Grundkonzepte
Eine Rolle ist eine Sammlung von Berechtigungen (zum Beispiel: Beiträge erstellen, Beiträge ändern). Eine Rolle kann einem oder mehreren Benutzern zugewiesen werden. Um zu prüfen, ob ein Benutzer über eine bestimmte Berechtigung verfügt, prüft das System, ob dem Benutzer die Rolle zugeordnet ist, die die Berechtigung enthält.
Sie können eine Regel verwenden, um sie einer Rolle oder Berechtigung zuzuordnen. Eine Regel wird durch einen Code dargestellt und die Ausführung der Regel erfolgt, wenn überprüft wird, ob ein Benutzer diese Rolle oder Berechtigung erfüllt. Beispielsweise könnte die Berechtigung „Beitrag ändern“ eine Regel verwenden, die prüft, ob der Benutzer der Ersteller des Beitrags ist. Wenn der Benutzer bei der Berechtigungsprüfung nicht der Ersteller des Beitrags ist, wird davon ausgegangen, dass er (sie) nicht über die Berechtigung zum „Ändern von Beiträgen“ verfügt.
Sowohl Rollen als auch Berechtigungen können hierarchisch organisiert werden. In bestimmten Fällen kann eine Rolle aus anderen Rollen oder Berechtigungen bestehen, die wiederum aus anderen Berechtigungen bestehen können. Yii implementiert eine sogenannte lokale Ordnungshierarchie, die spezifischere Baumebenen enthält. Eine Rolle kann eine Berechtigung enthalten, aber nicht umgekehrt. (Anmerkung des Übersetzers: Es ist verständlich, dass Rollen oben und Berechtigungen unten stehen. Wenn Berechtigungen von oben nach unten angetroffen werden, können Rollen nicht weiter unten angezeigt werden.)
Zweitens: Konfigurieren Sie RBAC
Zu Beginn Bevor Sie Berechtigungsdaten definieren und Zugriffsprüfungen durchführen, müssen Sie die Anwendungskomponente yiibaseApplication::authManager konfigurieren. Yii bietet zwei Sätze von Autorisierungsmanagern: yiirbacPhpManager und yiirbacDbManager. Ersteres verwendet PHP-Skripte zum Speichern von Autorisierungsdaten, während letzteres eine Datenbank zum Speichern von Autorisierungsdaten verwendet. Wenn Ihre Anwendung keine große Anzahl dynamischer Rollen und Berechtigungsverwaltung erfordert, können Sie die Verwendung von ersterem in Betracht ziehen
1: Verwenden Sie yiirbacPhpManager
return [ // ... 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\PhpManager', ], // ... ], ];
Nachdem die Konfiguration abgeschlossen ist, können Sie Yii verwenden: :$app-> ;authManager für den Zugriff auf authManager
yiirbacPhpManager speichert RBAC-Daten standardmäßig in Dateien im @app/rbac-Verzeichnis. Wenn die Berechtigungsstufendaten zur Laufzeit geändert werden, stellen Sie sicher, dass der WEB-Serverprozess über Schreibberechtigungen für das Verzeichnis und die darin enthaltenen Dateien verfügt.
2: Verwenden Sie yiirbacDbManager
(1) Konfigurieren Sie yiirbacDbManager
return [ // ... 'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', // uncomment if you want to cache RBAC items hierarchy // 'cache' => 'cache', ], // ... ], ];
Hinweis hier:
Wenn Sie die Basisvorlage von Yii verwenden, die oben genannten Zur Konfiguration, Sie müssen es sowohl in den Dateien config/console.php als auch config/web.php konfigurieren. Wenn Sie ein erweitertes Template von Yii sind, müssen Sie es nur einmal in der Datei common/config/main.php
konfigurieren(2) Generieren Sie die erforderlichen Berechtigungstabellen
Wenn Sie yiirbacDbManager verwenden, müssen Sie 4 Datenbanktabellen generieren, um Berechtigungsdaten zu speichern (sie haben alle Standardtabellennamen. Wenn Sie die Tabellennamen ändern müssen, yiirbacDbManager konfigurieren Bei Bedarf ändern)
itemTable: In dieser Tabelle werden Autorisierungseinträge gespeichert (Anmerkung des Übersetzers: Rollen und Berechtigungen). Der Standardtabellenname ist „auth_item“ .
itemChildTable: Diese Tabelle speichert die hierarchische Beziehung autorisierter Einträge. Der Standardtabellenname ist „auth_item_child“.
assignmentTable: In dieser Tabelle wird die Zuordnung von Berechtigungseinträgen zu Benutzern gespeichert. Der Standardtabellenname ist „auth_assignment“.
ruleTable: In dieser Tabelle werden Regeln gespeichert. Der Standardtabellenname ist „auth_rule“.
Führen Sie
yii migrate --migrationPath=@yii/rbac/migrations
Im Projektverzeichnis aus, nachdem Sie den obigen Befehl ausgeführt haben Zeit wir Die vier oben genannten Tabellen werden in der Datenbank generiert
Wenn Sie zum Generieren der Datenbank keine detaillierten Befehle verwenden, können Sie den Inhalt von Vendoryiisoftyii2rbacmigrationsschema-mysql hinzufügen. sql Kopieren Sie es in die Datenbank und führen Sie es aus, um die Datentabelle zu generieren
Nach dem Generieren der entsprechenden Berechtigungstabelle können wir Yii::$app->authManager verwenden, um auf authManager zuzugreifen
Drei : Autorisierungsdaten festlegen
1: Berechtigungen hinzufügen (erstellen) (Berechtigungsdaten in der Tabelle auth_item generieren, Typ ist 2, der Berechtigungen angibt)
$auth = Yii::$app->authManager;// 添加 "createPost" 权限$createPost = $auth->createPermission('createPost'); $createPost->description = '创建了createPost权限'; $auth->add($createPost);
2: Eine Rolle erstellen (Rollendaten in der Tabelle generieren). auth_item-Tabelle, Typ ist 1 stellt die Rolle dar)
$auth = Yii::$app->authManager; $role = $auth->createRole('author'); $role->description = '创建了author角色'; $auth->add($role);
3: Berechtigungen für die Rolle erteilen
(1) Bestimmte Berechtigungen für die Rolle erteilen
$auth = Yii::$app->authManager; $createPost = $auth->createPermission('createPost');//创建权限对象 $role = $auth->createRole('author');//创建角色对象 $auth->addChild($role, $createPost); //添加对应关系(给author角色添加createPost权限)
(2) Alle gewähren Berechtigungen für die Rolle für die angegebene Rolle
$auth = Yii::$app->authManager; $role1 = $auth->createRole('author1');//创建角色对象 $role2 = $auth->createRole('author2');//创建权限对象 $auth->addChild($role1, $role2); //添加对应关系(给author1角色添加author2角色所有权限)
4: Benutzern Rollen zuweisen
$auth = Yii::$app->authManager; $role = $auth->createRole('author');//创建角色对象$auth->assign($role, 1); #1是IdentityInterface::getId()返回的id,及用户表的id
Vier: Berechtigungen überprüfen
\Yii::$app->user->can($action) #$action表示权限\Yii::$app->user->can('createPost') #判断用户是否具有createPost权限
Rolle des Benutzers abrufen
$auth = Yii::$app->authManager; $roles = $auth->getRolesByUser($userId);
Holen Sie sich die Berechtigungen des Benutzers
$auth = Yii::$app->authManager; $roles = $auth->getPermissionsByUser($userId);
Das Obige ist ein einfaches Verständnis der rollenbasierten Zugriffskontrolle (RBAC). Einzelheiten finden Sie in der offiziellen Dokumentation von Yii
Das obige ist der detaillierte Inhalt vonYii-Autorisierung rollenbasierte Zugriffskontrolle (RBAC). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!