TP thinkphp 許可權管理 許可權認證 功能
阿新 • • 發佈:2018-11-11
目前,在tp框架中做許可權管理 分rbac(老)與auth(推薦)認證方式;
老的tp版本中封裝的是rbac認證;
新一點的都開始使用auth方式管理了。推薦使用此方式;
實現步驟一:引入類庫Auth.class.php
實現步驟二:建立資料表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
a.選單表
CREATE TABLE `wifi_admin_nav` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT
'選單表'
,
`pid` int(11) unsigned DEFAULT '0'
COMMENT
'所屬選單'
,
`name` varchar(15) DEFAULT
''
COMMENT
'選單名稱'
,
`mca` varchar(255) DEFAULT ''
COMMENT
'模組、控制器、方法'
,
`ico` varchar(20) DEFAULT
''
COMMENT
'font-awesome圖示'
,
`order_number` int(11) unsigned DEFAULT NULL COMMENT
'排序'
,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;
INSERT INTO `wifi_admin_nav` VALUES (
'1'
,
'0'
,
'系統設定'
,
'Admin/ShowNav/config'
,
'cog'
,
'1'
);
INSERT INTO `wifi_admin_nav` VALUES (
'2'
,
'1'
,
'選單管理'
,
'Admin/Nav/index'
, null, null);
INSERT INTO `wifi_admin_nav` VALUES (
'7'
,
'4'
,
'許可權管理'
,
'Admin/Rule/index'
,
''
,
'1'
);
INSERT INTO `wifi_admin_nav` VALUES (
'4'
,
'0'
,
'許可權控制'
,
'Admin/ShowNav/rule'
,
'expeditedssl'
,
'2'
);
INSERT INTO `wifi_admin_nav` VALUES (
'8'
,
'4'
,
'使用者組管理'
,
'Admin/Rule/group'
,
''
,
'2'
);
INSERT INTO `wifi_admin_nav` VALUES (
'9'
,
'4'
,
'管理員列表'
,
'Admin/Rule/admin_user_list'
,
''
,
'3'
);
INSERT INTO `wifi_admin_nav` VALUES (
'16'
,
'0'
,
'會員管理'
,
'Admin/ShowNav/'
,
'users'
,
'4'
);
INSERT INTO `wifi_admin_nav` VALUES (
'17'
,
'16'
,
'會員列表'
,
'Admin/User/index'
,
''
, null);
INSERT INTO `wifi_admin_nav` VALUES (
'36'
,
'0'
,
'文章管理'
,
'Admin/ShowNav/posts'
,
'th'
,
'6'
);
INSERT INTO `wifi_admin_nav` VALUES (
'37'
,
'36'
,
'文章列表'
,
'Admin/Posts/index'
,
''
, null);
b.使用者組表
CREATE TABLE `wifi_auth_group` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` char(100) NOT NULL DEFAULT
''
,
`status` tinyint(1) NOT NULL DEFAULT
'1'
,
`rules` text COMMENT
'規則id'
,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT=
'使用者組表'
;
INSERT INTO `wifi_auth_group` VALUES (
'1'
,
'超級管理員'
,
'1'
,
'6,96,20,1,2,3,4,5,64,126,21,7,8,9,10,11,12,13,14,15,16,123,124,125,19,104,105,106,107,108,109,110,111,112,117'
);
INSERT INTO `wifi_auth_group` VALUES (
'2'
,
'產品管理員'
,
'1'
,
'6,96,1,2,3,4,56,57,60,61,63,71,72,65,67,74,75,66,68,69,70,73,77,78,82,83,88,89,90,99,91,92,97,98,104,105,106,107,108,118,109,110,111,112,117,113,114'
);
INSERT INTO `wifi_auth_group` VALUES (
'4'
,
'文章編輯'
,
'1'
,
'6,96,57,60,61,63,71,72,65,67,74,75,66,68,69,73,79,80,78,82,83,88,89,90,99,100,97,98,104,105,106,107,108,118,109,110,111,112,117,113,114'
);
c.使用者與使用者組關係表
CREATE TABLE `wifi_auth_group_access` (
`uid` int(11) unsigned NOT NULL COMMENT
'使用者id'
,
`group_id` int(11) unsigned NOT NULL COMMENT
'使用者組id'
,
UNIQUE KEY `uid_group_id` (`uid`,`group_id`),
KEY `uid` (`uid`),
KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=
'使用者組明細表'
;
INSERT INTO `wifi_auth_group_access` VALUES (
'1'
,
'1'
);
INSERT INTO `wifi_auth_group_access` VALUES (
'211'
,
'2'
);
INSERT INTO `wifi_auth_group_access` VALUES (
'203'
,
'4'
);
d.許可權表
CREATE TABLE `wifi_auth_rule` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(11) unsigned NOT NULL DEFAULT
'0'
COMMENT
'父級id'
,
`name` char(80) NOT NULL DEFAULT
''
COMMENT
'規則唯一標識'
,
`title` char(20) NOT NULL DEFAULT
''
COMMENT
'規則中文名稱'
,
`status` tinyint(1) NOT NULL DEFAULT
'1'
COMMENT
'狀態:為1正常,為0禁用'
,
`type` tinyint(1) unsigned NOT NULL DEFAULT
'1'
,
`condition` char(100) NOT NULL DEFAULT
''
COMMENT
'規則表示式,為空表示存在就驗證,不為空表示按照條件驗證'
,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=127 DEFAULT CHARSET=utf8 COMMENT=
'規則表'
;
INSERT INTO `wifi_auth_rule` VALUES (
'1'
,
'20'
,
'Admin/ShowNav/nav'
,
'選單管理'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'2'
,
'1'
,
'Admin/Nav/index'
,
'選單列表'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'3'
,
'1'
,
'Admin/Nav/add'
,
'新增選單'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'4'
,
'1'
,
'Admin/Nav/edit'
,
'修改選單'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'5'
,
'1'
,
'Admin/Nav/delete'
,
'刪除選單'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'21'
,
'0'
,
'Admin/ShowNav/rule'
,
'許可權控制'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'7'
,
'21'
,
'Admin/Rule/index'
,
'許可權管理'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'8'
,
'7'
,
'Admin/Rule/add'
,
'新增許可權'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'9'
,
'7'
,
'Admin/Rule/edit'
,
'修改許可權'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'10'
,
'7'
,
'Admin/Rule/delete'
,
'刪除許可權'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'11'
,
'21'
,
'Admin/Rule/group'
,
'使用者組管理'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'12'
,
'11'
,
'Admin/Rule/add_group'
,
'新增使用者組'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'13'
,
'11'
,
'Admin/Rule/edit_group'
,
'修改使用者組'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'14'
,
'11'
,
'Admin/Rule/delete_group'
,
'刪除使用者組'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'15'
,
'11'
,
'Admin/Rule/rule_group'
,
'分配許可權'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'16'
,
'11'
,
'Admin/Rule/check_user'
,
'新增成員'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'19'
,
'21'
,
'Admin/Rule/admin_user_list'
,
'管理員列表'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'20'
,
'0'
,
'Admin/ShowNav/config'
,
'系統設定'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'6'
,
'0'
,
'Admin/Index/index'
,
'後臺首頁'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'64'
,
'1'
,
'Admin/Nav/order'
,
'選單排序'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'96'
,
'6'
,
'Admin/Index/welcome'
,
'歡迎介面'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'104'
,
'0'
,
'Admin/ShowNav/posts'
,
'文章管理'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'105'
,
'104'
,
'Admin/Posts/index'
,
'文章列表'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'106'
,
'105'
,
'Admin/Posts/add_posts'
,
'新增文章'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'107'
,
'105'
,
'Admin/Posts/edit_posts'
,
'修改文章'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'108'
,
'105'
,
'Admin/Posts/delete_posts'
,
'刪除文章'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'109'
,
'104'
,
'Admin/Posts/category_list'
,
'分類列表'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'110'
,
'109'
,
'Admin/Posts/add_category'
,
'新增分類'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'111'
,
'109'
,
'Admin/Posts/edit_category'
,
'修改分類'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'112'
,
'109'
,
'Admin/Posts/delete_category'
,
'刪除分類'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'117'
,
'109'
,
'Admin/Posts/order_category'
,
'分類排序'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'123'
,
'11'
,
'Admin/Rule/add_user_to_group'
,
'設定為管理員'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'124'
,
'11'
,
'Admin/Rule/add_admin'
,
'新增管理員'
,
'1'
,
'1'
,
''
);
INSERT INTO `wifi_auth_rule` VALUES (
'125'
,
'11'
,
'Admin/Rule/edit_admin'
,
'修改管理員'
,
'1'
,
'1'
,
''
);
|
實現步驟三:專案配置檔案config.php中新增
'AUTH_CONFIG'=>array( 'AUTH_ON' => true, //認證開關 'AUTH_TYPE' => 1, // 認證方式,1為時時認證;2為登入認證。 'AUTH_GROUP' => 'wifi_auth_group', //使用者組表 'AUTH_GROUP_ACCESS' => 'wifi_auth_group_access', //使用者與使用者組關係表 'AUTH_RULE' => 'wifi_auth_rule', //許可權表 'AUTH_USER' => 'wifi_admin'//使用者表 )
實現步驟四:建立Common控制器,定義_initialize 方法,檢測當前使用者是否許可權(所有許可權驗證的類都需要繼承這個類),並規避不進行驗證的模組(配置檔案中定義的NOT_AUTH_MODULE)
<?php class CommonAction extends Action{ public function _initialize(){ // 使用者許可權檢查 import("ORG.Util.Auth"); $auth=new Auth(); $rule_name=GROUP_NAME.'/'.MODULE_NAME.'/'.ACTION_NAME; if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE'))) && $rule_name != "Admin/Public/verify") { $result=$auth->check($rule_name,$_SESSION['authId']); if(!$result) $this->error('您沒有許可權訪問'); } } }
實現步驟五:
a.選單管理:(NavAction控制器,AdminNavModel模型),對後臺選單進行增刪改查排序等
b.許可權管理:許可權管理功能。RuleAction控制器 AuthRuleModel模型 AuthGroupModel模型 AuthGroupAccessModel模型
1、對許可權進行展示、新增、修改、刪除
2、對使用者組進行許可權分配、使用者繫結、展示、新增、修改、刪除
3、對管理員進行使用者組繫結與資訊修改