Heim > Backend-Entwicklung > PHP-Tutorial > Yii-Autorisierung rollenbasierte Zugriffskontrolle (RBAC)

Yii-Autorisierung rollenbasierte Zugriffskontrolle (RBAC)

步履不停
Freigeben: 2023-04-06 22:44:02
Original
2726 Leute haben es durchsucht

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',
        ],        // ...
    ],
];
Nach dem Login kopieren

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',
        ],        // ...
    ],
];
Nach dem Login kopieren

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

Yii-Autorisierung rollenbasierte Zugriffskontrolle (RBAC)

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

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权限)
Nach dem Login kopieren

(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角色所有权限)
Nach dem Login kopieren

4: Benutzern Rollen zuweisen

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

Vier: Berechtigungen überprüfen

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

Rolle des Benutzers abrufen

$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($userId);
Nach dem Login kopieren

Holen Sie sich die Berechtigungen des Benutzers

$auth = Yii::$app->authManager;
$roles = $auth->getPermissionsByUser($userId);
Nach dem Login kopieren

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!

Verwandte Etiketten:
yii
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage