2015-12-18 21:17:46
連續看了幾天的Thinkphp框架,目前看到基于角色的用戶訪問權限控制。
相關代碼如下:
用戶表(管理員)
mg_id | mg_name | mg_pwd | mg_time | mg_role_id |
---|---|---|---|---|
0 | creatint | 123 | 2587413547 | 1 |
1 | yotaku | 123 | 258744984 | 4 |
CREAATE 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;
權限表
auth_id(權限ID) | auth_name(權限名稱) | auth_pid(父id) | auth_c(控制器) | auth_a(操作方法) | auth_path(全路徑) | auth_level(權限級別) |
---|---|---|---|---|---|---|
100 | 產品中心 | 0 | '' | '' | 100 | 0 |
101 | 產品展示 | 100 | ManagerController | show | 100-101 | 1 |
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 '控制器', `auth_a` varchar(32) NOT NULL DEFAULT '' COMMENT '操作方法', `auth_path` varchar(32) NOT NULL COMMENT '全路徑', `auth_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '級別', PRIMARY KEY(`auth_id`)) ENGING-InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
角色表
role_id | role_name | role_auth_ids | role_auth_ac |
---|---|---|---|
0 | 站主 | 1,3,9 | 操作器-控制器,操作器-控制器,... |
1 | 高級管理員 | 1,2,3,9,12 | 操作器-控制器,操作器-控制器,... |
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 '權限id,1,3,..', `role_auth_ac` text COMMENT '控制器2-操作3,控制器1-操作6,...', PRIMARY KEY(`role_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
數據模擬:
1.權限數據
產品中心(產品展示,最新產品,分類管理,子類管理) 高級管理(用戶留言,留言簿,產品訂購,文件管理) 系統管理(基本設置,樣式管理,首頁設置,管理員列表)
頂級權限insert into sw_auth values ( 100,'產品中心',0,'','',100,0 );insert into sw_auth values ( 101,'高級管理',0,'','',101,0 );insert into sw_auth values ( 102,'系統管理',0,'','',102,0 );insert into sw_auth values ( 103,'權限管理',0,'','',103,0 );次級權限insert into sw_auth values ( 104,'產品展示',100,'Goods','show','100-104',1 );insert into sw_auth values ( 105,'最新產品',100,'Goods','showlist','100-105',1 );insert into sw_auth values ( 106,'分類管理',100,'Goods','cate','100-106',1 );insert into sw_auth values ( 107,'用戶留言',101,'Goods','Words','101-107',1 );insert into sw_auth values ( 108,'留言簿', 101,'Goods','wordsbook','101-108',1 );insert into sw_auth values ( 109,'基本設置',102,'Goods','set','102-109',1 );insert into sw_auth values ( 110,'樣式管理',102,'Goods','CSS','102-110',1 );insert into sw_auth values ( 111,'用戶列表',103,'Goods','userlist','103-111',1 );insert into sw_auth values ( 112,'角色管理',103,'Goods','role','103-112',1 );insert into sw_auth values ( 113,'權限列表',103,'Goods','auth','103-113',1 );
2.角色數據
sw_role 站主 所有權限(103,104,105,106,107,108,109) 管理員 部分權限(104,105,109) 版主 部分權限(103,108)
角色insert into sw_role values (10,'站主','100,101,102,103,104,105,106,107,108,109,110,111,112,113','Goods-show,Goods-showlist,Goods-cate,Goods-words,Goods-wordsbook,Goods-set,Goods-css');insert into sw_role values (11,'管理員','100,102,104,105,109','Goods-showlist,Goods-cate,Goods-css');insert into sw_role values (12,'版主','100,101,103,106,108,113','Goods-show,Goods-set');
3.流程說明
Index控制器內 獲取用戶的角色id,進而獲得角色權限 進行判斷是否展現數據 Index控制器--->left方法--->left.html模板 Index控制器
$mg_id = session('admin_id');//D('Manager')實例化了一個Manager的Model對象
$manager_info = D('Manager')->find($mg_id); $role_id = $manager_info['mg_role_id'];//(2)根據role_id 獲得本身記錄信息
$role_info = D('Role')->find($role_id); $auth_ids = $role_info['role_auth_ids'];//(3)根據$auth_ids 獲得具體權限
$auth_infoA = D('Auth')->where("auth_level=0 and auth_id in($auth_ids)")->select();//父級
$auth_infoB = D('Auth')->where("auth_level=1 and auth_id in($auth_ids)")->select();//子級
$this->assign('auth_infoA',$auth_infoA); $this->assign('auth_infoB',$auth_infoB);//傳到模板中
$this->assign('auth_info',$auth_info); $this->display();
4.模板 left.html
新聞熱點
疑難解答