Heim Backend-Entwicklung PHP-Tutorial yii2 RBAC verwendet DbManager, um ein Beispiel für die Hintergrundberechtigung „urteil_php' zu implementieren

yii2 RBAC verwendet DbManager, um ein Beispiel für die Hintergrundberechtigung „urteil_php' zu implementieren

Aug 04, 2016 am 08:56 AM
rbac yii2 后台

Das Beispiel in diesem Artikel beschreibt, wie yii2 RBAC DbManager verwendet, um die Beurteilung von Hintergrundberechtigungen zu implementieren. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Generieren Sie zunächst die Tabelle im yii2-Framework basierend auf dem Dokument

yii migrate --migrationPath=@yii/rbac/migrations/

Generieren Sie die folgenden 4 Tabellen:

auth_assignment
auth_item_child
auth_item
auth_rule

Verwenden Sie yiis gii, um schnell das entsprechende Modell zu generieren. Da die Tabelle auth_item jedoch gleichzeitig Rollen und Berechtigungen speichert, habe ich hier zwei neue Modelle erstellt, RoleForm und, da wir später Rollen und Berechtigungen aufteilen werden PermissionForm, um sie zu unterscheiden. Da Rollen eng mit Berechtigungen verbunden sind, wird dem von auth_item generierten Modell ein zusätzliches Attribut $child hinzugefügt, das später verwendet wird und vorerst ignoriert wird.

Das Folgende ist der relevante Code für das Charaktermodell

<&#63;php
namespace app\models;
use Yii;
use app\models\AuthItem;
use yii\rbac\Item;
/*
 * 角色model
 * 指尖上的艺术家
 */
class RoleForm extends AuthItem
{
  public function init() {
    parent::init();
    $this->type = Item::TYPE_ROLE;//yii-rbac-Role隐藏继承常量这里的值是1
  }
}

Nach dem Login kopieren

Das Folgende ist der relevante Code des Berechtigungsmodells

<&#63;php
namespace app\models;
use Yii;
use app\models\AuthItem;
use yii\rbac\Item;
/*
 * 权限model
 * 指尖上的艺术家
 */
class PermissionForm extends AuthItem
{
  public function init() {
    parent::init();
    $this->type = Item::TYPE_PERMISSION;//常量值 2
  }
}

Nach dem Login kopieren

Fügen Sie außerdem ein Attribut zum AuthItem-Modell hinzu

<&#63;php
class AuthItem.....
public $child;//用于角色权限添加
......

Nach dem Login kopieren

Jetzt zu unserem entsprechenden Controller

Wenn wir den Berechtigungscontroller schreiben, müssen wir zunächst die systemeigenen Erweiterungen verwenden
. . .
verwenden Sie yiirbacPermission;
. . .

/*
 * 权限添加
 */
public function actionCreate() {
  $model = new PermissionForm();
  if( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
    //rbac中permission对象
    $permission = new Permission();
    $permission->name = trim( $model->name );
    $permission->type = $model->type;
    //权限添加
    Yii::$app->authManager->add( $permission );
  }
}

Nach dem Login kopieren

Beim Ändern bleiben die anderen Dinge gleich und ändern Sie nur die Methode

/*
 * param string $name 修改的权限名
 * param Object $permission 跟添加一样提交上来的数据
 */
Yii::$app->authManager->update( $name, $permission );

Nach dem Login kopieren

Hier löschen

//Returns the named permission.
$permission = Yii::$app->authManager->getPermission( $name );
//Removes a permission or rule from the RBAC system.
Yii::$app->authManager->remove( $permission );

Nach dem Login kopieren

Der Grundstein für die Berechtigungen ist vollständig, daher werde ich es nicht schreiben, wenn ich es überprüfen möchte

Das Folgende ist der Charakter-Controller

Bringen Sie das mit

use yii\rbac\Role;
/*
 * 角色添加
 */
public function actionCreate() {
  $model = new RoleForm();
  if ( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
      //实例化角色对象
      $role = new Role();
      $role->name = $model->name;
      $role->type = $model->type;
      //添加角色
      Yii::$app->authManager->add( $role );
  }
  //权限列表( 添加角色的时候我们就可看到当前有没有权限来添加 )
  $permissions = $this->loadPermission();
  //将$model跟$permissions....渲染到视图就好了
}

Nach dem Login kopieren
/*
 * 修改
 * param string $name 修改的角色名
 * param Object $role 跟添加一样提交上来的数据
 */
$bool = Yii::$app->authManager->update( $name, $role );

Nach dem Login kopieren

Es ist schwieriger, es zu löschen

/*
 * param string $name 角色名
 */
$role = Yii::$app->authManager->getRole( $name );//获取当前角色对象
//Returns the child roles.
$childAll = Yii::$app->authManager->getChildren( $role );
if ( isset($childAll) ) {//逐一删除权限
  foreach ($childAll as $value) {
    //Returns the named permission.
    $perObj = Yii::$app->authManager->getPermission($value);
    //Removes a child from its parent.
    Yii::$app->authManager->removeChild( $role, $perObj );
  }
}
Yii::$app->authManager->remove( $role );//最后删除我们的角色了

Nach dem Login kopieren

Das Wichtigste ist, dass wir der Rolle Berechtigungen erteilen müssen, richtig, wie im folgenden Code gezeigt

//当前角色所拥有的权限
$childArray = $this->loadRolePermission( $model->name );//这个就是返回权限数组
if ( !empty( $childArray ) ) {
  $model->child = $childArray;
}
else {
  $model->child = array();
}
//Returns all permissions in the system.
$permissions = Yii::$app->authManager->getPermissions();
$perArr = array();
foreach ($permissions as $key => $value) {
  $perArr[$value->name] = $value->name;
}
if ( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
  //角色对象
  $child = isset( $_POST['AuthItem']['child'] ) &#63; $_POST['AuthItem']['child'] : NULL;
  //表单无法验证child所以当为空的时候跳回原页面
  if ( empty( $child ) ) {
    return $this->redirect(..你们要跳的页面..);
  }
  //判断角色是否分配权限,已分配则删除,反之增加新的
  if ( !empty( $childArray ) ) {
    //Removed all children form their parent.
    $bool = Yii::$app->authManager->removeChildren( $model );
    if ( !$bool ) {
      throw new HttpException(404, '别想糊弄我!凑你一脸~~~');
    }
  }
  //当前角色对象
  $role = Yii::$app->authManager->getRole( $model->name );
  //child权限添加
  if( isset( $child ) ) {
    foreach ( $child as $val) {
      //获取权限
      $childObj = Yii::$app->authManager->getPermission($val);
      //给item_child表写入数据(权限表)
      Yii::$app->authManager->addChild( $role, $childObj );
    }
    return $this->redirect(..你们要跳的页面..);
  }
}

Nach dem Login kopieren

Schließlich ist unser letzter Controller die Rolle, die dem Benutzer zugeordnet ist

/*
 * 创建角色跟用户之间关联的关键部分代码
 */
//Returns the named role.
$role =Yii::$app->authManager->getRole( $roleName );
// Assigns a role to a user.
Yii::$app->authManager->assign( $role, $userId );<pre name="code" class="php">/*
 * 权限检测
 * param int| string $userId 用户id
 * param string $permission 权限名
 */
Yii::$app->authManager->checkAccess( $userId , $permission ) )

Nach dem Login kopieren

So ermitteln Sie Berechtigungen

/*
 * 权限检测
 * param int| string $userId 用户id
 * param string $permission 权限名
 */
Yii::$app->authManager->checkAccess( $userId , $permission ) )

Nach dem Login kopieren

Leser, die an mehr Yii-bezogenen Inhalten interessiert sind, können sich die speziellen Themen dieser Website ansehen: „Einführung in das Yii-Framework und Zusammenfassung gängiger Techniken“, „Zusammenfassung des ausgezeichneten PHP-Entwicklungsframeworks“, „Grundlegendes Tutorial für den Einstieg“. mit Smarty-Vorlagen“, „Einführungs-Tutorial zum objektorientierten PHP-Programmierung-Design“, „Zusammenfassung der PHP-String-(String-)Verwendung“, „Einführungs-Tutorial zum PHP-MySQL-Datenbankbetrieb“ und „Zusammenfassung allgemeiner PHP-Datenbankbetriebsfähigkeiten“

Ich hoffe, dass dieser Artikel für jedermann beim PHP-Programmdesign basierend auf dem Yii-Framework hilfreich sein wird.

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Discuz-Lösung für das Anmeldeproblem im Hintergrund enthüllt Discuz-Lösung für das Anmeldeproblem im Hintergrund enthüllt Mar 03, 2024 am 08:57 AM

Die Lösung für das Discuz-Hintergrund-Login-Problem wird aufgezeigt. Mit der rasanten Entwicklung des Internets ist die Website-Erstellung immer häufiger geworden, und Discuz wurde als häufig verwendetes Forum-Website-Erstellungssystem bevorzugt viele Webmaster. Gerade aufgrund seiner leistungsstarken Funktionen stoßen wir jedoch manchmal auf Probleme bei der Verwendung von Discuz, wie z. B. Probleme bei der Anmeldung im Hintergrund. Heute werden wir die Lösung für das Discuz-Hintergrund-Login-Problem enthüllen und konkrete Codebeispiele bereitstellen. Wir hoffen, den Bedürftigen zu helfen.

Sind Sie besorgt über verstümmelten WordPress-Backend-Code? Probieren Sie diese Lösungen aus Sind Sie besorgt über verstümmelten WordPress-Backend-Code? Probieren Sie diese Lösungen aus Mar 05, 2024 pm 09:27 PM

Sind Sie besorgt über verstümmelten WordPress-Backend-Code? Probieren Sie diese Lösungen aus, da spezifische Codebeispiele erforderlich sind. Mit der weit verbreiteten Anwendung von WordPress bei der Website-Erstellung kann es bei vielen Benutzern zu Problemen mit verstümmeltem Code im WordPress-Backend kommen. Ein solches Problem führt dazu, dass die Hintergrundverwaltungsoberfläche verstümmelte Zeichen anzeigt, was den Benutzern große Probleme bereitet. In diesem Artikel werden einige gängige Lösungen vorgestellt, die Benutzern helfen, das Problem verstümmelter Zeichen im WordPress-Backend zu lösen. Ändern Sie die Datei wp-config.php und öffnen Sie wp-config.

Wie deaktiviere ich die Hintergrundausführung von Software in Win11? Wie deaktiviere ich die Hintergrundausführung von Software in Win11? Jun 30, 2023 am 08:17 AM

Wie deaktiviere ich die Ausführung von Software im Hintergrund in Win11? Wir verwenden einige Software, wenn wir sie nicht verwenden. Einige Softwareprogramme werden weiterhin im Hintergrund ausgeführt. Während der Ausführung im Hintergrund kommt es zu einer gewissen Verzögerung . Einige Freunde möchten wissen, was zu tun ist, um die Ausführung von Software im Hintergrund in Win11 zu deaktivieren. Der unten stehende Editor hat die Schritte zum Deaktivieren der Ausführung von Software im Hintergrund in Win11 zusammengestellt. Wenn Sie interessiert sind, folgen Sie dem Editor und lesen Sie unten! Schritte zum Deaktivieren der im Hintergrund ausgeführten Software in Win11: 1. Drücken Sie die Tastenkombination „win+X“ und wählen Sie „Einstellungen“ aus den oben angegebenen Optionen. 2. Nachdem Sie die neue Benutzeroberfläche aufgerufen haben, klicken Sie auf „Apps“ und suchen Sie dann rechts nach „Anwendungen und Funktionen“. 3. Suchen Sie darin nach „Microsoft-Informationen“ und klicken Sie darauf

Discuz-Hintergrundanmeldung fehlgeschlagen? Bringen Sie Ihnen bei, wie Sie es einfach lösen können! Discuz-Hintergrundanmeldung fehlgeschlagen? Bringen Sie Ihnen bei, wie Sie es einfach lösen können! Mar 02, 2024 pm 06:03 PM

Discuz-Hintergrundanmeldung fehlgeschlagen? Bringen Sie Ihnen bei, wie Sie es einfach lösen können! Da Discuz als beliebte Forenplattform häufig bei der Erstellung und Verwaltung von Websites verwendet wird, kommt es manchmal zu Fehlern bei der Backend-Anmeldung, was besorgniserregend ist. Heute besprechen wir die Probleme, die zu Anmeldefehlern im Discuz-Backend führen können, stellen einige Lösungen bereit und fügen spezifische Codebeispiele bei. Ich hoffe, dieser Artikel kann Webmastern und Entwicklern helfen, die auf ähnliche Probleme stoßen. 1. Bei der Fehlerbehebung geht es darum, das Problem des Anmeldefehlers bei Discuz im Hintergrund zu lösen.

Entwicklung des ThinkPHP6-Backend-Managementsystems: Realisierung von Backend-Funktionen Entwicklung des ThinkPHP6-Backend-Managementsystems: Realisierung von Backend-Funktionen Aug 27, 2023 am 11:55 AM

Entwicklung des ThinkPHP6-Backend-Managementsystems: Implementierung von Backend-Funktionen Einführung: Mit der kontinuierlichen Weiterentwicklung der Internettechnologie und der Marktnachfrage benötigen immer mehr Unternehmen und Organisationen ein effizientes, sicheres und flexibles Backend-Managementsystem zur Verwaltung von Geschäftsdaten und zur Durchführung des Betriebsmanagements. In diesem Artikel wird das ThinkPHP6-Framework verwendet, um anhand von Beispielen zu demonstrieren, wie ein einfaches, aber praktisches Backend-Verwaltungssystem entwickelt wird, das grundlegende Funktionen wie Berechtigungskontrolle, Datenhinzufügung, Löschung, Änderung und Abfrage umfasst. Umgebungsvorbereitung Bevor wir beginnen, müssen wir PHP, MySQL, Com installieren

So entfernen Sie Jquery in yii2 So entfernen Sie Jquery in yii2 Feb 17, 2023 am 09:55 AM

So entfernen Sie jquery aus yii2: 1. Bearbeiten Sie die Datei AppAsset.php und kommentieren Sie den Wert „yii\web\YiiAsset“ in der Variablen $depends aus. 2. Bearbeiten Sie die Datei main.php und fügen Sie die Konfiguration als „'yii“ hinzu. unter dem Feld „components“ \web\JqueryAsset' => ['js' => [],'sourcePath' => null,]“, um das JQuery-Skript zu entfernen.

Discuz-Ausnahme bei der Anmeldung bei Hintergrundkonten, wie geht man damit um? Discuz-Ausnahme bei der Anmeldung bei Hintergrundkonten, wie geht man damit um? Mar 09, 2024 pm 05:51 PM

Titel: Discuz-Hintergrundkonto-Login-Ausnahme, wie geht man damit um? Wenn Sie die Backend-Verwaltung des Discuz-Forensystems verwenden, kann es manchmal zu einer abnormalen Kontoanmeldung kommen. Dies kann verschiedene Gründe haben, darunter ein falsches Passwort, die Sperrung des Kontos, Probleme mit der Netzwerkverbindung usw. Wenn wir auf diese Situation stoßen, müssen wir das Problem durch einfache Fehlerbehebung und Bearbeitung lösen. Überprüfen Sie, ob die Kontonummer und das Passwort korrekt sind: Überprüfen Sie zunächst, ob die von Ihnen eingegebene Kontonummer und das Passwort korrekt sind. Stellen Sie beim Anmelden sicher, dass die Groß- und Kleinschreibung korrekt ist und dass das Passwort korrekt ist

So wechseln Sie unter einem Linux-System reibungslos zwischen verschiedenen Anwendungen So wechseln Sie unter einem Linux-System reibungslos zwischen verschiedenen Anwendungen Feb 19, 2024 pm 03:00 PM

Der Wechsel zwischen verschiedenen Anwendungen wird durch das Vor- und Zurückschalten von Prozessen erreicht. Hintergrund: Nachdem Linux ein Programm gestartet hat, wechselt es zur Ausführung in den Hintergrund und möchte unter Linux weiterarbeiten. Unter Linux können Sie die folgenden Methoden verwenden, um ein Programm zu starten und im Hintergrund zu beenden, den Prozess aber trotzdem weiterlaufen zu lassen: 1. Linux startet ein Programm, das im Hintergrund ausgeführt wird. 1. Verwenden Sie nohup und &: $nohupyour_program& Verwenden Sie den Befehl nohup Das Programm ignoriert das Auflegesignal (SIGHUP), sodass das Programm auch dann weiterläuft, wenn Sie das Terminal verlassen. Das &-Symbol bewirkt, dass das Programm im Hintergrund ausgeführt wird. 2. Benutzen Sie Strg+Z: Wenn Sie das Programm im Vordergrund gestartet haben, können Sie ct verwenden

See all articles