下面由thinkphp框架教程欄目給大家介紹thinkphp5中auth權(quán)限設(shè)置以及實(shí)現(xiàn),希望對(duì)需要的朋友有所幫助!
1.將auth類(lèi)下載好 放置目錄: extendauthauth.php
2.將類(lèi)中的sql語(yǔ)句執(zhí)行,可以在數(shù)據(jù)庫(kù)中創(chuàng)建3張表?auth_group(用戶(hù)組表)? ? ? ? ? ?auth_rule(權(quán)限規(guī)則表)? ? ? ? ? ?auth_group_access(用戶(hù)與用戶(hù)組關(guān)聯(lián)表)
3.我想給規(guī)則 添加一個(gè)級(jí)別關(guān)系(類(lèi)似于無(wú)限極分類(lèi))? ?auth_rule(權(quán)限規(guī)則表) 中添加3個(gè)字段? pid(父級(jí)id ,0為頂級(jí)權(quán)限)? ?level(級(jí)別)? ? sort(排序),如下圖
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
4,首先 自己創(chuàng)建管理員表,比如叫admin表,增刪改查 自己去正常設(shè)計(jì),group字段為所屬用戶(hù)組
5.auth_group用戶(hù)組的?增刪改查 也自己去制作一下,id,用戶(hù)組名稱(chēng),狀態(tài)(開(kāi)啟,或者關(guān)閉),規(guī)則(所對(duì)應(yīng)的是規(guī)則表的id)
6.auth_rule規(guī)則表 增刪改查 也自己去制作一下,id,name(控制器/方法),title(規(guī)則名稱(chēng) )? status狀態(tài)(開(kāi)啟,或者關(guān)閉),
?
7. 在添加用戶(hù)的時(shí)候 給用戶(hù)選擇 所屬用戶(hù)組, uid(對(duì)應(yīng)的是用戶(hù)id)? ?group_id(對(duì)應(yīng)的是用戶(hù)所屬用戶(hù)組的id),這樣就關(guān)聯(lián)起來(lái)了
?
8.把會(huì)員登陸功能做好,登陸成功設(shè)置Session(‘id’),將當(dāng)前登陸會(huì)員ID存在session中
9.最關(guān)鍵的的一步,就是使用auth類(lèi)進(jìn)行驗(yàn)證,在common.php這個(gè)公共頁(yè)面中 使用
<?php namespace appadmincontroller; use thinkController; use thinkRequest; use authAuth; //引入suth類(lèi) class Common extends Controller { public function _initialize(){ //初始化判斷用戶(hù)是否已經(jīng)登陸 if(!session('uname')){ $this->error('請(qǐng)先登陸系統(tǒng)!','login/index'); ????????} ????????//獲得當(dāng)前頁(yè)面的控制器?/?方法 ???????$request=Request::instance(); ???????$moudle=$request->module();?//獲取當(dāng)前控制器名稱(chēng) ???????$con=$request->controller();?//獲取當(dāng)前控制器名稱(chēng) ???????$action=$request->action();??//獲取當(dāng)前方法名稱(chēng) ???????$this->assign(array( ???????????????'con'=>$con, ???????????????'action'=>$action, ???????)); ???????$rules=$con.'/'.$action;??//組合??控制器/方法 ???????$auth=new?Auth();?//實(shí)例化auth類(lèi) ???????$notCheck=array('Index/index');??//都可以訪(fǎng)問(wèn)的頁(yè)面 ???????if(session('uid')!=1){??//不是超級(jí)管理員才進(jìn)行權(quán)限判斷 ??????????if(!in_array($rules,$notCheck)){??//?是否在開(kāi)放權(quán)限里面 ??????????????if(!$auth->check($rules,session('uid'))){???//?第一個(gè)參數(shù)??控制/方法???第二個(gè)參數(shù):當(dāng)前登陸會(huì)員的id ?????????????????$this->error('沒(méi)有權(quán)限','index/index'); ???????????????}; ???????????} ????????} ???????}
最終展示;
?