目前,在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、对管理员进行用户组绑定与信息修改