亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于thinkPHP5框架auth權限控制類與用法的解析

2020-03-22 18:25:27
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了thinkPHP5框架auth權限控制類與用法,結合實例形式分析了thinkPHP5框架擴展auth權限控制類的定義與使用方法,代碼注釋中備有較為詳盡的使用說明與數據庫操作語句,需要的朋友可以參考下

本文實例講述了thinkPHP5框架auth權限控制類。分享給大家供大家參考,具體如下:

這個是比較簡單的用法:

直接把類貼出來,這里我改了,我沒有用uid,因為我建的表是admin表,所以代碼里對應查詢改成了aid

還有表名,我都去掉了前綴

 ?php// +----------------------------------------------------------------------// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]// +----------------------------------------------------------------------// | Copyright (c) 2011 http://thinkVeVb.com All rights reserved.// +----------------------------------------------------------------------// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )// +----------------------------------------------------------------------// | Author: luofei614 weibo.com/luofei614 // +----------------------------------------------------------------------namespace auth; * 權限認證類 * 功能特性: * 1,是對規則進行認證,不是對節點進行認證。用戶可以把節點當作規則名稱實現對節點進行認證。 * $auth=new Auth(); $auth- check( 規則名稱 , 用戶id ) * 2,可以同時對多條規則進行認證,并設置多條規則的關系(or或者and) * $auth=new Auth(); $auth- check( 規則1,規則2 , 用戶id , and ) * 第三個參數為and時表示,用戶需要同時具有規則1和規則2的權限。 當第三個參數為or時,表示用戶值需要具備其中一個條件即可。默認為or * 3,一個用戶可以屬于多個用戶組(think_auth_group_access表 定義了用戶所屬用戶組)。我們需要設置每個用戶組擁有哪些規則(think_auth_group 定義了用戶組權限) * 4,支持規則表達式。 * 在think_auth_rule 表中定義一條規則時,如果type為1, condition字段就可以定義規則表達式。 如定義{score} 5 and {score} 100 表示用戶的分數在5-100之間時這條規則才會通過。//數據庫-- ------------------------------ think_auth_rule,規則表,-- id:主鍵,name:規則唯一標識(就是常見的路由列表,如:admin/index/index), title:規則中文名稱,例如添加商品 status 狀態:為1正常,為0禁用,condition:規則表達式,為空表示存在就驗證,不為空表示按照條件驗證-- ---------------------------- DROP TABLE IF EXISTS `auth_rule`;CREATE TABLE `auth_rule` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `name` char(80) NOT NULL DEFAULT , `title` char(20) NOT NULL DEFAULT , `type` tinyint(1) NOT NULL DEFAULT 1 , `status` tinyint(1) NOT NULL DEFAULT 1 , `condition` char(100) NOT NULL DEFAULT , # 規則附件條件,滿足附加條件的規則,才認為是有效的規則 PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ------------------------------ auth_group 用戶組表,-- id:主鍵, title:用戶組中文名稱, rules:用戶組擁有的規則id, 多個規則 , 隔開,status 狀態:為1正常,為0禁用-- ---------------------------- DROP TABLE IF EXISTS `auth_group`;CREATE TABLE `auth_group` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `title` char(100) NOT NULL DEFAULT , `status` tinyint(1) NOT NULL DEFAULT 1 , `rules` char(80) NOT NULL DEFAULT , PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;-- ------------------------------ group_access 用戶組明細表-- uid:用戶id,group_id:用戶組id-- ----------------------------DROP TABLE IF EXISTS `group_access`;CREATE TABLE `group_access` ( `uid` mediumint(8) unsigned NOT NULL, `group_id` mediumint(8) unsigned NOT NULL, UNIQUE KEY `uid_group_id` (`uid`,`group_id`), KEY `uid` (`uid`), KEY `group_id` (`group_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;html' target='_blank'>class Auth{ //默認配置 protected $_config = array( auth_on = true, // 認證開關 auth_type = 1, // 認證方式,1為實時認證;2為登錄認證。 auth_group = auth_group , // 用戶組數據表名 auth_group_access = group_access , // 用戶-用戶組關系表 auth_rule = auth_rule , // 權限規則表 auth_user = admin // 用戶信息表 public function __construct() { if (config( auth_config )) { //可設置配置項 auth_config, 此配置項為數組。 $this- _config = array_merge($this- _config, config( auth_config  * 檢查權限 * @param name string|array 需要驗證的規則列表,支持逗號分隔的權限規則或索引數組 * @param uid int 認證用戶的id * @param string mode 執行check的模式 * @param relation string 如果為 or 表示滿足任一條規則即通過驗證;如果為 and 則表示需滿足所有規則才能通過驗證 * @return boolean 通過驗證返回true;失敗返回false public function check($name, $uid, $type=1, $mode= url , $relation= or ) { if (!$this- _config[ auth_on ]) return true; $authList = $this- getAuthList($uid,$type); //獲取用戶需要驗證的所有有效規則列表 if (is_string($name)) { $name = strtolower($name); if (strpos($name, , ) !== false) { $name = explode( , , $name); } else { $name = array($name); $list = array(); //保存驗證通過的規則名 if ($mode== url ) { $REQUEST = unserialize( strtolower(serialize($_REQUEST)) ); foreach ( $authList as $auth ) { $query = preg_replace( /^.+/?/U , ,$auth); if ($mode== url $query!=$auth ) { parse_str($query,$param); //解析規則中的param $intersect = array_intersect_assoc($REQUEST,$param); $auth = preg_replace( //?.*$/U , ,$auth); if ( in_array($auth,$name) $intersect==$param ) { //如果節點相符且url參數滿足 $list[] = $auth ; }else if (in_array($auth , $name)){ $list[] = $auth ; if ($relation == or and !empty($list)) { return true; $diff = array_diff($name, $list); if ($relation == and and empty($diff)) { return true; return false; * 根據用戶id獲取用戶組,返回值為數組 * @param uid int 用戶id * @return array 用戶所屬的用戶組 array( * array( uid = 用戶id , group_id = 用戶組id , title = 用戶組名稱 , rules = 用戶組擁有的規則id,多個,號隔開 ), * ...) public function getGroups($uid) { static $groups = array(); if (isset($groups[$uid])) return $groups[$uid]; $user_groups = /think/Db::name($this- _config[ auth_group_access ]) - alias( a ) - join($this- _config[ auth_group ]. g , g.id=a.group_id ) - where( a.aid= $uid and g.status= 1 ) - field( aid,group_id,title,rules )- select(); $groups[$uid] = $user_groups ? $user_groups : array(); return $groups[$uid]; * 獲得權限列表 * @param integer $uid 用戶id * @param integer $type protected function getAuthList($uid,$type) { static $_authList = array(); //保存用戶驗證通過的權限列表 $t = implode( , ,(array)$type); if (isset($_authList[$uid.$t])) { return $_authList[$uid.$t]; if( $this- _config[ auth_type ]==2 isset($_SESSION[ _auth_list_ .$uid.$t])){ return $_SESSION[ _auth_list_ .$uid.$t]; //讀取用戶所屬用戶組 $groups = $this- getGroups($uid); $ids = array();//保存用戶所屬用戶組設置的所有權限規則id foreach ($groups as $g) { $ids = array_merge($ids, explode( , , trim($g[ rules ], , ))); $ids = array_unique($ids); if (empty($ids)) { $_authList[$uid.$t] = array(); return array(); $map=array( id = array( in ,$ids), type = $type, status = 1, //讀取用戶組所有權限規則 $rules = /think/Db::name($this- _config[ auth_rule ])- where($map)- field( condition,name )- select(); //循環規則,判斷結果。 $authList = array(); // foreach ($rules as $rule) { if (!empty($rule[ condition ])) { //根據condition進行驗證 $user = $this- getUserInfo($uid);//獲取用戶信息,一維數組 $command = preg_replace( //{(/w*?)/}/ , $user[/ //1/ ] , $rule[ condition  //dump($command);//debug @(eval( $condition=( . $command .  if ($condition) { $authList[] = strtolower($rule[ name  } else { //只要存在就記錄 $authList[] = strtolower($rule[ name  $_authList[$uid.$t] = $authList; if($this- _config[ auth_type ]==2){ //規則列表結果保存到session $_SESSION[ _auth_list_ .$uid.$t]=$authList; return array_unique($authList); * 獲得用戶資料,根據自己的情況讀取數據庫 protected function getUserInfo($uid) { static $userinfo=array(); if(!isset($userinfo[$uid])){ $userinfo[$uid]=/think/Db::name($this- _config[ auth_user ])- where(array( aid = $uid))- find(); return $userinfo[$uid];}

Auth.php放在extend下面的auth目錄里,命名空間為auth

然后在使用的控制器中使用構造方法,或者繼承一個使用了構造方法的控制器,構造方法如下:

public function _initialize() $aid = 1; $auth = new /auth/Auth(); $request = Request::instance(); $au = $auth- check($request- module() . / . $request- controller() . / . $request- action(), $aid); if (!$au) {// 第一個參數是規則名稱,第二個參數是用戶UID /* return array( status = error , msg = 有權限! */ $this- error( 你沒有權限 }

上面的$aid應該是用戶登錄以后獲取的,正常情況下應該是session()獲取的用戶id

相關業務邏輯可以自行判斷,剩下的就是添加全縣,用戶組添加啊,等等系列增刪改查了。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

利用thinkPHP5框架實現基于ajax的分頁功能解析

thinkPHP5框架中widget的功能與用法解析

Thinkphp和Bootstrap結合打造個性分頁的樣式

以上就是關于thinkPHP5框架auth權限控制類與用法的解析的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品按摩视频| 成人午夜激情免费视频| 91精品国产高清久久久久久91| 久久av红桃一区二区小说| 亚洲第一精品夜夜躁人人躁| 欧美俄罗斯乱妇| 亚洲va欧美va在线观看| 久久精品色欧美aⅴ一区二区| 日韩美女主播视频| 欧美精品免费看| 亚洲人成网站免费播放| 日韩av网站大全| 亚洲美女av网站| 色综合天天综合网国产成人网| 国产成人av网址| 91免费精品国偷自产在线| 欧美日韩成人在线观看| 久久久久久久久久久久av| 国产成人综合精品| 一区二区三区精品99久久| xxxxxxxxx欧美| 日韩精品视频中文在线观看| 成人高h视频在线| 日本国产高清不卡| 亚洲性线免费观看视频成熟| 国产精品18久久久久久首页狼| 在线精品视频视频中文字幕| 久久五月天综合| 欧美日韩电影在线观看| 4p变态网欧美系列| 国产精品久久在线观看| 亚洲香蕉伊综合在人在线视看| 日韩人体视频一二区| 色与欲影视天天看综合网| 国产97在线观看| 亚洲精品一区二区三区婷婷月| 国产成人精品久久二区二区| 日韩av免费观影| 久久精品久久久久电影| 久久久久久久亚洲精品| 在线视频欧美日韩精品| 久久九九全国免费精品观看| 成人看片人aa| 这里只有精品久久| 一区二区三区高清国产| 日韩欧美主播在线| 国产日韩中文在线| 精品久久久久久久久久ntr影视| 97色在线观看免费视频| 色综合久久悠悠| 最新91在线视频| 久久久国产成人精品| 91在线无精精品一区二区| 欧美日本啪啪无遮挡网站| 欧美丝袜第一区| 国产精品网站入口| 成人午夜一级二级三级| 91麻豆国产语对白在线观看| 久99九色视频在线观看| 91成人性视频| 国产va免费精品高清在线观看| 欧美大片va欧美在线播放| 日韩动漫免费观看电视剧高清| 疯狂做受xxxx欧美肥白少妇| 久久久久久久97| 亚洲国产日韩欧美在线99| 久久成人免费视频| 国产成人亚洲综合91精品| 亚洲三级免费看| 国产欧美一区二区三区在线看| 亚洲a级在线播放观看| 日韩电影中文字幕在线观看| 国产极品精品在线观看| 自拍偷拍亚洲一区| 成人精品久久一区二区三区| 自拍偷拍亚洲区| 亚洲国产97在线精品一区| 都市激情亚洲色图| 97国产精品免费视频| 日韩欧美中文字幕在线观看| 亚洲国产精品悠悠久久琪琪| 国产欧美一区二区三区久久人妖| 日韩激情av在线播放| 欧美日韩国产二区| 成人妇女淫片aaaa视频| 国产精品ⅴa在线观看h| 丰满岳妇乱一区二区三区| 91手机视频在线观看| 97免费中文视频在线观看| 色综合天天狠天天透天天伊人| 成人a在线观看| 亚洲wwwav| 日韩成人免费视频| 欧美电影免费观看高清| 精品人伦一区二区三区蜜桃免费| 在线一区二区日韩| 日韩在线视频二区| 日韩人体视频一二区| 亚洲色图av在线| 亚洲欧美国产另类| 日韩精品在线观看视频| 日韩成人在线视频网站| 久久久久久久久久久久久久久久久久av| 亚洲另类欧美自拍| 欧美日韩国产综合视频在线观看中文| 91精品国产高清自在线看超| 亚洲国产日韩欧美在线99| 欧美猛少妇色xxxxx| 色综合老司机第九色激情| 亚洲一区二区国产| 中文字幕精品在线视频| 日韩经典第一页| xxx一区二区| 欧洲日韩成人av| 777国产偷窥盗摄精品视频| 亚洲网址你懂得| 超碰精品一区二区三区乱码| 亚洲女成人图区| 亚洲精品视频二区| 国产精品视频公开费视频| 亚洲精品98久久久久久中文字幕| 亚洲国产成人爱av在线播放| 国产亚洲欧美日韩美女| 日韩免费观看高清| 影音先锋欧美在线资源| 国产精品日韩在线一区| 亚洲国产精品va在线看黑人动漫| 欧美精品videossex88| 日本一区二区在线播放| 欧美性色视频在线| 国产精品91在线观看| 亚洲美女在线观看| 欧美激情精品久久久| 91理论片午午论夜理片久久| 亲爱的老师9免费观看全集电视剧| 97在线视频免费播放| 欧美成人精品三级在线观看| 久久视频在线观看免费| 97人人爽人人喊人人模波多| 国产精品ⅴa在线观看h| 日韩福利视频在线观看| 国产一区二区三区免费视频| 亚洲国产精品va| 欧美午夜丰满在线18影院| 欧美老女人www| 欧美性xxxxx极品娇小| 精品女同一区二区三区在线播放| 久久全球大尺度高清视频| 欧美俄罗斯性视频| 国产精品成人av性教育| 欧美精品aaa| 欧美精品在线看| 久久99精品久久久久久青青91| 中文字幕欧美日韩在线| 亚洲美腿欧美激情另类| 成人精品视频久久久久| 久久久久久av| 欧美三级免费观看| 亚洲人成在线免费观看| 亚洲v日韩v综合v精品v| 亚洲欧美日本伦理| 亚洲国产精久久久久久久| 国产日韩欧美在线| 疯狂欧美牲乱大交777|