Heim > Backend-Entwicklung > PHP-Tutorial > Verwenden Sie thinkphp5, um eine rollenbasierte Zugriffskontrolle (rbac-Berechtigungen) zu implementieren.

Verwenden Sie thinkphp5, um eine rollenbasierte Zugriffskontrolle (rbac-Berechtigungen) zu implementieren.

little bottle
Freigeben: 2023-04-06 08:44:01
nach vorne
5131 Leute haben es durchsucht

In diesem Artikel geht es hauptsächlich um die Verwendung von thinkphp5 zur Implementierung der rollenbasierten Zugriffskontrolle (rbac-Berechtigungen) und wir teilen ihn mit allen, um Freunden in Not als Referenz zu dienen.

Eins

Erstellen Sie zuerst eine Datenbank.

Zum Beispiel: Erstellen Sie eine Testdatenbank Die Tabellen sind: test_admin (Administratortabelle), test_role, test_auth.

Dies ist die neu erstellte Testbibliothek

Administratortabelle

Dies ist die neu erstellte Admin-Tabelle. Diese Tabelle ist die Benutzertabelle, die den Benutzer des Verwaltungshintergrunds darstellt.

Das issuper-Feld dieser Tabelle gibt an, ob es sich um einen Superadministrator handelt. Dieser Superadministrator kann alle Rollen verwalten und alle Berechtigungen ausführen.

admin_role_id Dieses Feld beschreibt hauptsächlich die Rollentabellen-ID, die anderen Administratoren als Superadministratoren entspricht. Nachfolgend geben wir die Rollentabelle an.

Rollentabelle

Diese Tabelle ist die Rollentabelle. Seine Haupt-ID und die admin_role_id des Administrators können erkennen, in welcher Rollenverwaltung sich der Administrator befindet.

Berechtigungstabelle

Diese Tabelle ist eine Berechtigungstabelle und ihre Haupt-ID entspricht der role_auth_id der Rollentabelle. Daraus kann geschlossen werden, dass verschiedene Rollen unterschiedliche Berechtigungen zur Ausführung haben.

 Melden Sie sich auf der Website-Backend-Verwaltungsseite an, um Rollen und Rollenberechtigungen für verschiedene Administratoren anzuzeigen.

Administrator erstellen .php, Role.php und Auth.php in der Modellebene der Admin-Datei der Tinkphp-Anwendung für die Geschäftsverarbeitung

Erstellen Sie dann index.php in der Controller-Ebene

<?php
namespace app\admin\controller;
use think\Controller;
use think\Url;
use think\Request;
use think\Session;
use app\admin\model\Auth as AuthModel
use app\admin\model\Role as RoleModel

class Index extends CommonController
{
     public $role;
     public $auth;
     public $view;
public funtion __construct()
{
  $this->role = new RoleModel()
  $this->auth = new AuthModel()
  $this->view = new View();
}   

  publci function auth()
{
//角色id;
  $admin_id = sesison(&#39;admin_id&#39;);
  $admin_name = session(&#39;admin_name&#39;);

  $resAdmin = $this->admin->where([&#39;admin_id&#39;=>$admin_id])->select();
  if($resAdmin[0]->issuper == 1){
//超级管理员拥有全部权限;
//一级权限;
  $authA = $this->auth->where([&#39;auth_level&#39;]=>0)->select();
//二级权限
  $authB = $this->auth->where([&#39;auth_level&#39;=>1])->select();
} else {
  //权限ids;
  $role_auth_ids = $this->role->where([&#39;role_id&#39;=>$admin_role_id])->select();
  $authA = $this->auth->where(&#39;auth_level&#39; , 0)->where(&#39;auth_id&#39; , &#39;in&#39; , $role_auth_ids)->select();
  $authB  = $this->auth->where(&#39;auth_level&#39; , 1])->where(&#39;auth_id&#39; , &#39;in&#39; , $role_auth_ids)->select();
}

  $auth = array(&#39;authA&#39;=>$authA , &#39;authB&#39;=>$authB);
  $this->redirect(&#39;admin/&#39;.$auth[&#39;authA&#39;][0]->auth_c.&#39;/&#39;.$auth[&#39;authA&#39;][0]->auth_a);

}

public function leftnav()
{
  $admin_id = session(&#39;admin_id&#39;);
  $amin_name = session(&#39;admin_name&#39;);
  //角色id;
  $resAdmin = $this->admin->where([&#39;admin_id&#39;]=>$admin_id)->select();
  $admin_role_id = $resAdmin[0]->$admin_role_id;
  if($resAdmin[0]->issuper == 1){
  //超级管理员super拥有全部权限;
 //一级权限;
  $authA = $this->auth->where([&#39;auth_level&#39;=>0])->select();
 //二级权限;
  $authB = $this->auth->where([&#39;auth_level&#39;=>1])->select();
}  else {
  //权限ids
  $role_auth_ids = $this->role->where([&#39;role_id&#39;=>$admin_role_id])->select();
  $role_auth_ids = $role_auth_ids[0]->role_auth_ids;

  $authA = $this->auth->where(&#39;auth_level&#39; , 0)->where(&#39;auth_id&#39; , &#39;in&#39; , $role_auth_ids)->select();
  $authB = $this->auth->where(&#39;auth_level&#39; , 1)->where(&#39;auth_id&#39; , &#39;in&#39; , $role_aut_ids)->select();
}

  $auth = array(&#39;authA&#39;=>$authA , &#39;authB&#39;=>$authB);
  $this->view->assign(&#39;authA&#39; , $auth[&#39;authA&#39;]);
  $this->view->assign(&#39;authB&#39; , $auth[&#39;authB&#39;]);
}

    
}
Nach dem Login kopieren

Lassen Sie mich nun die Funktion der oben genannten Authentifizierungsmethode erklären, die zur Umleitung verwendet wird, wenn der angemeldete Manager auf die URL-Adresse umleitet Wenn er eine Adresse eingibt, die nicht zu seinen Berechtigungen gehört, leiten wir ihn auf seine eigene Verwaltungsseite

und den Inhalt des geerbten CommonControllers weiter >

 Berechtigungskontrolle

Business, der Controller leitet den Administrator auf seine eigene Betriebsseite weiter.

<?php
namspace app\admin\controller;
use think\Controller;
use think\Request;
use app\admin\model\Common as Controller
{
  public function __construct()
{
  parent::__construct();
  $res = new CommonModel();
  $resquest = Request::instance();

  if(session(&#39;admin_id&#39;) == null){
  if(strtolower($resquest->controller()) == &#39;index&#39; && strtolower($resquest->action()) == &#39;login&#39;){
  return true;
} else {
 $this->error(&#39;没有登陆!<br /><span style="color:gray;">...</span> &#39;);
}

 $resCommon = $res->auth();
 if(Request::instance()->isAjax()){
  $this->ajaxReturn([&#39;msg&#39;=>&#39;没有操作权限!&#39; , &#39;code&#39;=>&#39;201&#39;] , &#39;json&#39;);
} else {
 $this->error(&#39;没有操作权限!<br><span style="color:gray;">...</span>&#39;);
}
}
}
}
Nach dem Login kopieren
Das obige CommonModel wird in CommonController aufgerufen, um die Berechtigungsstufe des Administrators zu beurteilen. Verwandte Tutorials: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonVerwenden Sie thinkphp5, um eine rollenbasierte Zugriffskontrolle (rbac-Berechtigungen) zu implementieren.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage