rbac 相关
2019獨角獸企業重金招聘Python工程師標準>>>
--用戶表 CREATE?TABLE?`sw_manager`?(`mg_id`?int(11)?NOT?NULL?AUTO_INCREMENT,`mg_name`?varchar(32)?NOT?NULL,`mg_pwd`?varchar(32)?NOT?NULL,`mg_time`?int(10)?unsigned?NOT?NULL?COMMENT?'時間',`mg_role_id`?tinyint(3)?unsigned?NOT?NULL?DEFAULT?'0'?COMMENT?'角色id',PRIMARY?KEY?(`mg_id`) )?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8--權限表 CREATE?TABLE?`sw_auth`?(`auth_id`?smallint(6)?unsigned?NOT?NULL?AUTO_INCREMENT,`auth_name`?varchar(20)?NOT?NULL?COMMENT?'名稱',`auth_pid`?smallint(6)?unsigned?NOT?NULL?COMMENT?'父id',`auth_c`?varchar(32)?NOT?NULL?DEFAULT?''?COMMENT?'控制器',controller控制器?Goods`auth_a`?varchar(32)?NOT?NULL?DEFAULT?''?COMMENT?'操作方法',action??方法?showlist`auth_path`?varchar(32)?NOT?NULL?COMMENT?'全路徑',全路徑:用戶信息排序使用①?:?如果是頂級權限,全路徑等于本記錄主鍵值②?:如果不是頂級權限,全路徑等于?"父級全路徑-(中恒線)本記錄主鍵值"`auth_level`?tinyint(4)?NOT?NULL?DEFAULT?'0'?COMMENT?'級別',基本:0頂級權限??1次頂級權限??2次次頂級權限呈現縮進關系使用PRIMARY?KEY?(`auth_id`) )?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8權限數據模擬: insert?into?sw_auth?values?(1,'商品管理',0,'','',1,0); insert?into?sw_auth?values?(2,'訂單管理',0,'','',2,0); insert?into?sw_auth?values?(3,'廣告管理',0,'','',3,0); insert?into?sw_auth?values?(4,'商品列表',1,'Goods','showlist',"1-4",1); insert?into?sw_auth?values?(5,'添加商品',1,'Goods','add',"1-5",1); insert?into?sw_auth?values?(6,'商品分類',1,'Goods','cate',"1-6",1); insert?into?sw_auth?values?(7,'用戶評論',1,'User','comment',"1-7",1); insert?into?sw_auth?values?(8,'訂單列表',2,'Order','showlist',"2-8",1); insert?into?sw_auth?values?(9,'訂單打印',2,'Order','print',"2-9",1); insert?into?sw_auth?values?(10,'添加訂單',2,'Order','add',"2-10",1); insert?into?sw_auth?values?(11,'廣告列表',3,'Advert','showlist',"3-11",1); insert?into?sw_auth?values?(12,'廣告位置',3,'Advert','position',"3-12",1);--角色表 CREATE?TABLE?`sw_role`?(`role_id`?smallint(6)?unsigned?NOT?NULL?AUTO_INCREMENT,`role_name`?varchar(20)?NOT?NULL?COMMENT?'角色名稱',`role_auth_ids`?varchar(128)?NOT?NULL?DEFAULT?''?COMMENT?'權限ids,1,2,5',"4,5,6"?關聯權限的主鍵值用逗號連接的信息(如果有上級權限,也把上級權限的id進行關聯)`role_auth_ac`?text?COMMENT?'模塊-操作',關聯權限的控制器、方法連接的信息"Goods-showlist,Goods-add,Goods-cate"PRIMARY?KEY?(`role_id`) )?ENGINE=InnoDB?AUTO_INCREMENT=1?DEFAULT?CHARSET=utf8角色數據模擬: insert?into?sw_role?values?(1,?'經理',?"1,4,5,6","Goods-showlist,Goods-add,Goods-cate"); insert?into?sw_role?values?(2,?'主管',?"2,3,8,11","Order-showlist,Advert-showlist");角色:董事長總監高級經理經理項目經理業務主管客服技術支持美工員工php后臺首頁控制器代碼
<?php//后臺首頁控制器 //商品控制器 namespace?Admin\Controller; use?Component\AdminController;class?IndexController?extends?AdminController{//首頁frameset?html框架集成方法function?index(){$this?->?display();}//展現后臺頭部頁面function?head(){//獲得當前系統都給我們提供了什么常量可供使用(系統和自定義的)//get_defined_constants([true])//true參數會把常量進行自動分組顯示//var_dump(get_defined_constants(true));$this?->?display();}//左邊頁面function?left(){//根據session用戶id信息查詢角色id信息$sql?=?"select?*?from?sw_manager?where?mg_id=".$_SESSION['mg_id'];$minfo?=?D()->query($sql);$role_id?=?$minfo[0]['mg_role_id'];//根據角色信息獲得權限ids的信息$sql?=?"select?*?from?sw_role?where?role_id=".$role_id;$rinfo?=?D()->query($sql);$auth_ids?=?$rinfo[0]['role_auth_ids'];//根據$auth_ids查詢全部擁有的權限信息//①?獲得頂級權限$sql?=?"select?*?from?sw_auth?where?auth_level=0?";//如果是admin管理員要現實全部權限if($_SESSION['mg_id']?!=?1){$sql?.=?"?and?auth_id?in?($auth_ids)";}$p_info?=?D()->query($sql);//②?獲得次頂級權限$sql?=?"select?*?from?sw_auth?where?auth_level=1";//如果是admin管理員要現實全部權限if($_SESSION['mg_id']?!=?1){$sql?.=?"?and?auth_id?in?($auth_ids)";}$s_info?=?D()->query($sql);$this?->?assign('pauth_info',$p_info);$this?->?assign('sauth_info',$s_info);$this?->?display();}//右邊頁面function?right(){$this?->?display();}}普通控制器父類 做權限過濾用
<?php//普通控制器的父類 namespace?Component; use?Think\Controller;class?AdminController?extends?Controller{//構造方法function?__construct()?{//先執行父類的構造方法,否則系統要報錯//因為原先的構造方法默認是被執行的parent::__construct();//CONTROLLER_NAME?---Goods//ACTION_NAME??----showlist//當前請求操作$now_ac?=?CONTROLLER_NAME."-".ACTION_NAME;//過濾控制器和方法,避免用戶非法請求//通過角色獲得用戶可以訪問的控制器和方法信息$sql?="select?role_auth_ac?from?sw_manager?a?join?sw_role?b?on?a.mg_role_id=b.role_id?where?a.mg_id=".$_SESSION['mg_id'];$auth_ac?=?D()->query($sql);$auth_ac?=?$auth_ac[0]['role_auth_ac'];//判斷$now_ac是否在$auth_ac字符串里邊有出現過//strpos函數如果返回false是沒有出現,返回0?1?2?3表示有出現//管理員不限制//默認以下權限沒有限制//Index/left??Index/right??Index/head??Index/index??Manager/login$allow_ac?=?array('Index-left','Index-right','Index-head','Index-index','Manager-login');if(!in_array($now_ac,$allow_ac)?&&?$_SESSION['mg_id']?!=1?&&?strpos($auth_ac,$now_ac)?===?false){$this?->?error('沒有權限訪問',U("Index/right"));}} }轉載于:https://my.oschina.net/tony2015/blog/408070
總結
- 上一篇: DB2 格式化输出 Date
- 下一篇: Android-Material-Exa