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
little bottlenach vorne
2019-04-22 16:13:385127Durchsuche

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;]);
}

    
}

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;);
}
}
}
}
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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen