Heim  >  Artikel  >  php教程  >  Anmerkungen zur Yii2-Rahmenstudie (6) – RBAC

Anmerkungen zur Yii2-Rahmenstudie (6) – RBAC

黄舟
黄舟Original
2016-12-30 10:00:221364Durchsuche

Neben Skins gibt es auch einen sehr wichtigen Funktionspunkt in der Hintergrundvorbereitungsarbeit, nämlich die Berechtigungskontrolle.

Yii2 bietet ein grundlegendes Framework für die Berechtigungskontrolle mithilfe von RBAC (Role Based Access Control), einer rollenbasierten Zugriffskontrolle.

Um es einfach auszudrücken: Verschiedene Rollen haben unterschiedliche Berechtigungen. Beispielsweise kann die Rolle „Administrator/Gast“ Seiten durchsuchen und Benutzer verwalten, während Gastbenutzer nur Seiten durchsuchen usw. Ein bestimmter Benutzer kann an eine Rolle gebunden werden, um die Berechtigungen dieser Rolle auszuüben.

Kopieren Sie die Datei „vendor/yiisoft/yii2/rbac/migration/m140506_102106_rbac_init.php“ in die Konsolen-/Migrationsdatei.

Führen Sie im yii-Verzeichnis yii migrate aus. Sie werden gefragt, ob Sie das gerade kopierte Skript ausführen möchten. Geben Sie „Ja“ ein. Nach Abschluss können Sie sehen, dass in der Datenbank vier neue Tabellen erstellt wurden.

Anmerkungen zur Yii2-Rahmenstudie (6) – RBAC

Informationen zu den spezifischen Funktionen dieser Tabellen finden Sie unter http://blog.csdn.net/yiifans/article/details/27528327
Ich werde nicht gehen Gehen Sie hier ins Detail, erläutern Sie jedoch hauptsächlich, wie Sie rbac verwenden.

Zuerst nehmen wir einige Konfigurationen in unserem Code vor.

common/config/main-local.php, ändern Sie authManager wie folgt, um die Datenbank aufzurufen

...     
 'components' => [  
        ...  
        'authManager' => [  
            'class' => 'yii\rbac\DbManager',  
            'defaultRoles' => ['guest'],  
        ],  
        ...  
 ],  
...

Schreiben Sie ein Befehlszeilenskript, um rbac zu initialisieren und rbac zu verwenden.

Erstellen Sie eine neue RbacController.php unter console/controllers/

Zunächst wird der Controller unter console/controllers über das Befehlszeilentool yii im yii-Stammverzeichnis ausgeführt und auch unterstützt route, das heißt, die actionInit-Methode von RbacController wird mit yii rbac/init aufgerufen.

Der Code von RbacController lautet wie folgt

<?php

namespace console\controllers;

use yii\console\Controller;
class RbacController extends Controller {
	/**
	 * Init base roles
	 */
	public function actionInit() {
		
		$auth = \Yii::$app->authManager;
		
		$auth->removeAll();
		
		$managerUser = $auth->createPermission("managerUser");
		$managerUser->description = "manage user list";
		$auth->add($managerUser);
		
		$guest = $auth->createRole("guest");
		$auth->add($guest);
		
		$admin = $auth->createRole("admin");
		$auth->add($admin);
		$auth->addChild($admin, $managerUser);
	}
	
	/**
	 * Assign a specific role to the given user id 
	 * @param int $userid
	 * @param string $role
	 */
	public function actionAssign($userid, $role) {
		$auth = \Yii::$app->authManager;
		$roleItem = $auth->getRole($role);
		If ($roleItem == null) {
			throw new Exception("the role is not found");
		}
		$auth->assign($roleItem, $userid);
	}
}

Das PHP-Dokument wird im Befehlszeilentool angezeigt, geben Sie yii help ein, das Ergebnis ist wie folgt

Anmerkungen zur Yii2-Rahmenstudie (6) – RBAC

Geben Sie zuerst yii rbac/init ein, dann werden zwei Rollen erstellt: Admin und Guest Admin haben ManagerUser-Berechtigungen, Guest jedoch nicht.

Dann geben Sie yii rbac/assign 1 admin ein, um dem Benutzer mit der Benutzer-ID 1 eine Administratorrolle zuzuweisen.

Testen Sie nach Abschluss der Vorbereitung, ob die Berechtigungen wirksam werden.

Erstellen Sie ein neues Backend/controllers/UserController.php, überschreiben Sie die Verhaltensmethode und konfigurieren Sie verschiedene Berechtigungen für verschiedene Aktionen. Hier fügen wir der Manager-Benutzer-Aktion eine Konfiguration hinzu, für deren Zugriff manageUser-Berechtigungen erforderlich sind. Der spezifische Code lautet wie folgt.

<?php
namespace backend\controllers;

use yii\web\Controller;
use yii\filters\AccessControl;
class UserController extends Controller {
	
	public function behaviors() {
		return [ 
			&#39;access&#39; => [ 
				&#39;class&#39; => AccessControl::className (),
				&#39;rules&#39; => [ 
					[ 
						&#39;actions&#39; => [ &#39;update-userprofile&#39;],
						&#39;allow&#39; => true,
						&#39;roles&#39; => [ &#39;@&#39; ]
					],
					[
						&#39;actions&#39; => [ &#39;manage-user&#39;],
						&#39;allow&#39; => true,
						&#39;roles&#39; => [ &#39;admin&#39; ]
					]
				] 
			],
		];
	}
	
	public function actionUpdateUserprofile()
	{
		return "sth";
	}
	
	public function actionManageUser() {
		return "inside";
	}
}

Die Rolle ist @, was bedeutet, dass jeder angemeldete Benutzer darauf zugreifen kann, und die Rolle ist admin, was bedeutet, dass nur Benutzer mit der Rolle des Administrators darauf zugreifen können.

Sie können die Ergebnisse testen.

Wenn ein Admin-Benutzer zugreift

Anmerkungen zur Yii2-Rahmenstudie (6) – RBAC

Wenn ein Nicht-Administrator-Benutzer zugreift

Anmerkungen zur Yii2-Rahmenstudie (6) – RBAC

Das Obige ist Yii2 Hinweise zum Framework-Lernen (6) - RBAC-Inhalte. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
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