Java 企业级权限管理项目笔记(四) - - - 权限管理系统核心表设计

关于为什么要自己写一套权限管理系统的原因?

  1. 满足框架的要求进行配置
  2. 没有界面操作和查看
  3. 期望更细致的管理

目前笔者所在的公司,项目中所使用的权限管理系统并不是使用SpringSecurity 或者 SpringShiro 这套框架,其中原因:既有以上的三个原因,也有最重要的一点,这两个框架对开发人员并不是很友善,也因此,项目中使用的自己开发的权限管理。而本人便是该权限管理系统的主要开发人员,不过由于项目权限体系的需求原因,所以学习慕课某课程,深入了解权限管理的核心,提高相应的能力。

一、权限管理项目需开发的内容

配置管理类功能

权限拦截类功能

辅助类功能: 缓存(Redis)、各种树结构生成

二、功能构成:

1、配置管理类功能:

  • 用户、权限、角色的管理界面(扩展用:部门、权限模块)
  • 角色 - 用户管理、角色-权限管理
  • 权限更新日志管理

2、权限拦截类功能:

  • 在切面(Filter)做权限拦截
  • 确定用户是否拥有某个权限

3、辅助类功能:

  • 缓存(Redi)的封装和使用
  • 各种树:部门树、权限模块树、角色权限树、用户权限树
  • 权限操作恢复

三、详细表结构设计

设计规范:

 每个表都有自己的主键;

字段尽量定义为NOT NULL;

尽量为每个字段添加备注;

数据库字段统一小写,单词之间使用下划线分隔;

使用InnoDB存储引擎;

可以使用varchar的字段尽可能不使用 TEXT、BLOB类型;

表字符集选择 UTF8

详细表结构设计:

           

1、部门表

CREATE TABLE `sys_dept` (
`id`  int NOT NULL AUTO_INCREMENT COMMENT '部门id' , `name` varchar(20) NOT NULL COMMENT '部门名称' , `parent_id` int NOT NULL DEFAULT 0 COMMENT '上级部门id' , `level` varchar(200) NOT NULL DEFAULT '' COMMENT '部门层级' , `seq` int NOT NULL DEFAULT 0 COMMENT '部门在当前层级下的顺序。由小到大排序' , `remark` varchar(200) NULL DEFAULT '' COMMENT '备注' , `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者' , `operator_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最后一次操作时间' , `operator_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新操作者ip' , PRIMARY KEY (`id`) );

2、用户表

CREATE TABLE `sys_user` (
`id`  int NOT NULL AUTO_INCREMENT COMMENT 'user id' , `username` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名字' , `telephone` varchar(13) NOT NULL DEFAULT '' COMMENT '联系方式' , `mail` varchar(20) NOT NULL DEFAULT '' COMMENT '邮箱' , `password` varchar(40) NOT NULL DEFAULT '' COMMENT '密码' , `dept_id` int NOT NULL DEFAULT 0 COMMENT '部门id' , `status` int NOT NULL COMMENT '用户状态' , `remark` varchar(200) NULL DEFAULT '' COMMENT '备注' , `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者' , `operator_time` datetime NOT NULL DEFAULT now() ON UPDATE CURRENT_TIMESTAMP COMMENT '最后一次操作时间' , `operator_ip` varchar(20) NOT NULL , PRIMARY KEY (`id`) );

3、权限模块表

CREATE TABLE `sys_acl_module` (
`id`  int NOT NULL AUTO_INCREMENT COMMENT '权限id' , `name` varchar(20) NOT NULL COMMENT '权限名称' , `parent_id` int NOT NULL DEFAULT 0 COMMENT '上级权限id' , `level` varchar(200) NOT NULL DEFAULT '' COMMENT '权限层级' , `seq` int NOT NULL DEFAULT 0 COMMENT '权限在当前层级下的顺序。由小到大排序' , `status` int NOT NULL DEFAULT 0 COMMENT '1表示可用,0表示失效' , `remark` varchar(200) NULL DEFAULT '' COMMENT '备注' , `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者' , `operator_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最后一次操作时间' , `operator_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新操作者ip' , PRIMARY KEY (`id`) );

4、权限表

CREATE TABLE `sys_acl` (
`id`  int NOT NULL AUTO_INCREMENT COMMENT '权限id' , `code` varchar(20) NOT NULL DEFAULT '' COMMENT '权限码' , `name` varchar(20) NOT NULL DEFAULT '' COMMENT '权限名称' , `acl_module_id` int NOT NULL DEFAULT 0 COMMENT '权限所在模块的id' , `url` varchar(100) NOT NULL DEFAULT '' COMMENT '请求的url,可用填正则表达式' , `type` int NOT NULL DEFAULT 1 COMMENT '类型1:菜单;2:按钮;3:其他' , `status` int NOT NULL DEFAULT 1 COMMENT '状态:1:正常;2:冻结' , `seq` int NOT NULL COMMENT '权限在当前模块下的顺序' , `remark` varchar(200) NULL DEFAULT '' COMMENT '备注' , `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者' , `operator_time` datetime NOT NULL DEFAULT now() ON UPDATE CURRENT_TIMESTAMP COMMENT '最后操作时间' , `operator_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后操作者的ip' , PRIMARY KEY (`id`) );

5、角色表

CREATE TABLE `sys_role` (
`id`  int NOT NULL AUTO_INCREMENT COMMENT '角色id' , `name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称' , `type` int NOT NULL DEFAULT 2 COMMENT '角色类型1:管理员。2:其他用户' , `status` int NOT NULL DEFAULT 1 COMMENT '状态:1:正常;2:冻结' , `remark` varchar(200) NULL DEFAULT '' COMMENT '备注' , `operator` varchar(20) NOT NULL DEFAULT '' , `operator_time` datetime NOT NULL DEFAULT now() ON UPDATE CURRENT_TIMESTAMP , `opeator_ip` varchar(20) NOT NULL DEFAULT '' , PRIMARY KEY (`id`) );

6、角色用户关联表

CREATE TABLE `sys_role_user` (
`id`  int NOT NULL AUTO_INCREMENT , `role_id` int NOT NULL COMMENT '角色id' , `user_id` int NOT NULL COMMENT '用户id' , `operator` varchar(20) NOT NULL , `operator_time` datetime NOT NULL DEFAULT now() ON UPDATE CURRENT_TIMESTAMP , `operator_ip` varchar(20) NOT NULL , PRIMARY KEY (`id`) );

7、角色-权限关联表

CREATE TABLE `sys_role_acl` (
`id`  int NOT NULL AUTO_INCREMENT , `role_id` int NOT NULL COMMENT '角色id' , `acl_id` int NOT NULL COMMENT '权限id' , `operator` varchar(20) NOT NULL , `operator_time` datetime NOT NULL DEFAULT now() ON UPDATE CURRENT_TIMESTAMP , `operator_ip` varchar(20) NOT NULL , PRIMARY KEY (`id`) );

8、权限相关更新记录表

CREATE TABLE `sys_log` (
`id`  int NOT NULL AUTO_INCREMENT COMMENT 'id' , `type` int NOT NULL DEFAULT 0 COMMENT '权限更新的类型:1:部门;2:用户;3:权限模块;4:权限;5:角色;6:角色用户关系;7:角色权限关系;' , `target_id` int NOT NULL COMMENT '基于type指定的对象id,比如用户、角色、权限表的主键' , `old_value` text NOT NULL , `new_value` text NOT NULL , `operator` varchar(255) NOT NULL , `operator_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP , `operator_ip` varchar(255) NOT NULL , `status` int NOT NULL COMMENT '当前是否复原过0:没有;1:有' , PRIMARY KEY (`id`) );

注意: 

            datetime类型只支持Mysql5.6.5以上版本。

            以下的版本将 datetime 换成 TIMESTAMP 即可。

猜你喜欢

转载自www.cnblogs.com/wushaopei/p/11681415.html