话不多说,直接入正题。
现在的互联网应用几乎都会有一个或者多个管理后台,那么如果正确,准确的分配不同角色权限呢,这就需要一个统一的权限分配管理系统,这个系统可以管理多个不同的应用后台,管理不同的人的不同系统下的不同角色权限,精准的控制到每一个action,而不是粗略的control。
下面是我最近在做的一个权限系统所设计的表结构。希望对大家有所帮助。
主要思想:
1)用户管理表
2)角色表
3)权限节点表
4)用户和角色表
5)角色和权限表
下面的表结构能够适合绝大多数的应用权限管理系统。
# 节点CREATE TABLE `tblRbacNode` (`node_id` int(10) unsigned NOT NULL AUTO_INCREMENT,`node_name` varchar(100) DEFAULT '' COMMENT '节点action',`node_url` varchar(100) DEFAULT '' COMMENT '节点 url',`title` varchar(100) DEFAULT '' COMMENT '节点名称',`deleted` tinyint(4) DEFAULT 0 COMMENT '0展示 1隐藏',`sort` int(10) unsigned DEFAULT 0 COMMENT '排序',`parent_id` int(10) unsigned DEFAULT 0 COMMENT '父节点',`level` tinyint(4) unsigned DEFAULT 0 COMMENT '1应用 2控制器 3action',`app_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '应用',`app_name` varchar(100) DEFAULT '' COMMENT '应用名称',`is_tab` tinyint(4) NOT NULL DEFAULT 0 COMMENT '1 侧边栏 0 页面节点',`create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',`update_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新时间',`operator_uid` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '操作人uid',`operator` varchar(100) NOT NULL DEFAULT '' COMMENT '操作人',`ext_data` varchar(5000) NOT NULL DEFAULT '' COMMENT '扩展属性json',PRIMARY KEY (`node_id`),KEY `level` (`level`),KEY `parent_id` (`parent_id`),KEY `node_name` (`node_name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '节点表';CREATE TABLE `tblRbacRole` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`role_id` int(10) unsigned COMMENT '角色id 自10000起',`role_name` varchar(1000) NOT NULL COMMENT '角色名',`parent_id` int(10) unsigned DEFAULT 0 COMMENT '父节点',`deleted` tinyint(4) DEFAULT 0 COMMENT '删除',`app_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '应用',`create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',`update_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新时间',`operator_uid` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '操作人uid',`operator` varchar(100) NOT NULL DEFAULT '' COMMENT '操作人',`ext_data` varchar(5000) NOT NULL DEFAULT '' COMMENT '扩展属性json',PRIMARY KEY (`id`),KEY `role_id` (`role_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '角色群组表';CREATE TABLE `tblRbacAccess` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`role_id` int(10) unsigned NOT NULL COMMENT '角色id',`node_id` int(10) unsigned NOT NULL COMMENT '节点id',`deleted` tinyint(4) DEFAULT 0 COMMENT '删除',`app_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '应用',`create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',`update_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新时间',`operator_uid` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '操作人uid',`operator` varchar(100) NOT NULL DEFAULT '' COMMENT '操作人',`ext_data` varchar(5000) NOT NULL DEFAULT '' COMMENT '扩展属性json',PRIMARY KEY (`id`),KEY `role_id` (`role_id`),KEY `node_id` (`node_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '权限表';CREATE TABLE `tblRbacUser` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '用户id',`deleted` tinyint(4) DEFAULT 0 COMMENT '删除',`app_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '应用',`create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',`update_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新时间',`operator_uid` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '操作人uid',`operator` varchar(100) NOT NULL DEFAULT '' COMMENT '操作人',`ext_data` varchar(5000) NOT NULL DEFAULT '' COMMENT '扩展属性json',PRIMARY KEY (`id`),KEY `uid` (`uid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '用户表';CREATE TABLE `tblRbacRoleUser` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`role_id` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '角色id',`uid` bigint(20) NOT NULL DEFAULT 0 COMMENT '用户id',`deleted` tinyint(4) DEFAULT 0 COMMENT '删除',`app_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '应用,`create_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '创建时间',`update_time` int(10) unsigned NOT NULL DEFAULT 0 COMMENT '更新时间',`operator_uid` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '操作人uid',`operator` varchar(100) NOT NULL DEFAULT '' COMMENT '操作人',`ext_data` varchar(5000) NOT NULL DEFAULT '' COMMENT '扩展属性json',PRIMARY KEY (`id`),KEY `role_id` (`role_id`),KEY `uid` (`uid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '用户角色表';