瞭解來這麼久權限控制權限的知識,殊不知道如何寫代碼,網上的代碼多數並無多少完整的源碼能提供參考。偶然看到官網的例子,如今終於也把源碼的實現也弄得明白了一點。php
tp5框架的Auth類能夠實現頁面的訪問權限,還能夠精確到頁面上的按鈕。頁面訪問主要靠rule表的name字段。附加條件權限主要看condition字段。sql
源碼下載:https://files.cnblogs.com/files/mzzone/D.zip,數據庫配置在database.php.數據庫名爲tp5_db.數據庫
源碼是從官網的一篇權限管理文章下的,他那裏提到了對節點(路由)進行權限管理,但沒有具體源碼。又查閱了其餘幾篇文章,加了一些代碼,數組
僅僅是實現了session
1.除開放頁面,要求用戶登陸才能繼續訪問其餘頁面。app
2.規定哪些用戶能夠訪問哪些頁面。框架
着重控制是訪問頁面的權限,按鈕點擊是否有效的權限官網的也有示例。ui
// 1.首先判斷是否爲超級管理員
// --管理員直接放行
// --非管理員再次判斷
// 2.若是是非管理員,再次判斷訪問的節點是否在開放的數組列表中
// --節點在屬於開放權限,直接放行
// --節點不屬於開放權限,再次判斷
// 3.不屬於開放權限,判斷有沒有登陸
// --用戶已經登陸,繼續使用auth類檢查有無權限
// -----用戶有權限,直接放行
// -----用戶無權限,能夠選擇不作動做,也可讓它跳轉到首頁。
// --用戶未登陸,提示並跳轉到登陸頁面。this
<?php namespace app\index\controller; use think\Request; use think\Controller; use think\auth\Auth; class Base extends Controller { public function _initialize() { //得到當前頁面的控制器 / 方法 $request=Request::instance(); $moudle=$request->module(); //獲取當前控制器名稱 $con=$request->controller(); //獲取當前控制器名稱 $action=$request->action(); //獲取當前方法名稱 // $this->assign(array( // 'con'=>$con, // 'action'=>$action, // )); $rules=$con.'/'.$action; //組合 控制器/方法 $auth=new Auth(); //實例化auth類 $notCheck=array('Index/index','Index/login','Index/dologin','Index/logout'); //均可以訪問的頁面 if(session('uid')!=2){ //不是超級管理員才進行權限判斷 if(!in_array($rules,$notCheck)){ // 是否在開放權限裏面 if(!session('uid')){ $this->error('請先登錄系統!','index/login'); } if(!$auth->check($rules,session('uid'))){ // 第一個參數 控制/方法 第二個參數:當前登錄會員的id $this->error('沒有權限','index/index'); }; } } } }