Heim >Backend-Entwicklung >PHP-Tutorial >Verwenden Sie thinkphp5, um eine rollenbasierte Zugriffskontrolle (rbac-Berechtigungen) zu implementieren.
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('admin_id'); $admin_name = session('admin_name'); $resAdmin = $this->admin->where(['admin_id'=>$admin_id])->select(); if($resAdmin[0]->issuper == 1){ //超级管理员拥有全部权限; //一级权限; $authA = $this->auth->where(['auth_level']=>0)->select(); //二级权限 $authB = $this->auth->where(['auth_level'=>1])->select(); } else { //权限ids; $role_auth_ids = $this->role->where(['role_id'=>$admin_role_id])->select(); $authA = $this->auth->where('auth_level' , 0)->where('auth_id' , 'in' , $role_auth_ids)->select(); $authB = $this->auth->where('auth_level' , 1])->where('auth_id' , 'in' , $role_auth_ids)->select(); } $auth = array('authA'=>$authA , 'authB'=>$authB); $this->redirect('admin/'.$auth['authA'][0]->auth_c.'/'.$auth['authA'][0]->auth_a); } public function leftnav() { $admin_id = session('admin_id'); $amin_name = session('admin_name'); //角色id; $resAdmin = $this->admin->where(['admin_id']=>$admin_id)->select(); $admin_role_id = $resAdmin[0]->$admin_role_id; if($resAdmin[0]->issuper == 1){ //超级管理员super拥有全部权限; //一级权限; $authA = $this->auth->where(['auth_level'=>0])->select(); //二级权限; $authB = $this->auth->where(['auth_level'=>1])->select(); } else { //权限ids $role_auth_ids = $this->role->where(['role_id'=>$admin_role_id])->select(); $role_auth_ids = $role_auth_ids[0]->role_auth_ids; $authA = $this->auth->where('auth_level' , 0)->where('auth_id' , 'in' , $role_auth_ids)->select(); $authB = $this->auth->where('auth_level' , 1)->where('auth_id' , 'in' , $role_aut_ids)->select(); } $auth = array('authA'=>$authA , 'authB'=>$authB); $this->view->assign('authA' , $auth['authA']); $this->view->assign('authB' , $auth['authB']); } }
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('admin_id') == null){ if(strtolower($resquest->controller()) == 'index' && strtolower($resquest->action()) == 'login'){ return true; } else { $this->error('没有登陆!<br /><span style="color:gray;">...</span> '); } $resCommon = $res->auth(); if(Request::instance()->isAjax()){ $this->ajaxReturn(['msg'=>'没有操作权限!' , 'code'=>'201'] , 'json'); } else { $this->error('没有操作权限!<br><span style="color:gray;">...</span>'); } } } }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!