# Permission **Repository Path**: evan_qb/Permission ## Basic Information - **Project Name**: Permission - **Description**: 权限控制系统 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: permission-perfect - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-08-07 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Permission #### 项目介绍 权限控制系统 #### 软件架构 数据库设计 ### 建表语句 **权限表** ``` DROP TABLE IF EXISTS `sys_acl`; CREATE TABLE `sys_acl` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限id', `code` varchar(20) NOT NULL DEFAULT '' COMMENT '权限码', `name` varchar(20) NOT NULL DEFAULT '' COMMENT '权限名称', `acl_module_id` int(11) NOT NULL DEFAULT '0' COMMENT '权限所在的权限模块id', `url` varchar(100) NOT NULL DEFAULT '' COMMENT '请求的url, 可以填正则表达式', `type` int(11) NOT NULL DEFAULT '3' COMMENT '类型,1:菜单,2:按钮,3:其他', `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态,1:正常,0:冻结', `seq` int(11) NOT NULL DEFAULT '0' COMMENT '权限在当前模块下的顺序,由小到大', `remark` varchar(200) DEFAULT '' COMMENT '备注', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间', `operate_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一个更新者的ip地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4; ``` **权限模块表** ``` DROP TABLE IF EXISTS `sys_acl_module`; CREATE TABLE `sys_acl_module` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限模块id', `name` varchar(20) NOT NULL DEFAULT '' COMMENT '权限模块名称', `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '上级权限模块id', `level` varchar(200) NOT NULL DEFAULT '' COMMENT '权限模块层级', `seq` int(11) NOT NULL DEFAULT '0' COMMENT '权限模块在当前层级下的顺序,由小到大', `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态,1:正常,0:冻结', `remark` varchar(200) DEFAULT '' COMMENT '备注', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次操作时间', `operate_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新操作者的ip地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=`DYN`AMIC; ``` **部门表** ``` DROP TABLE IF EXISTS `sys_dept`; CREATE TABLE `sys_dept` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门id', `name` varchar(20) NOT NULL DEFAULT '' COMMENT '部门名称', `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '上级部门id', `level` varchar(200) NOT NULL DEFAULT '' COMMENT '部门层级', `seq` int(11) NOT NULL DEFAULT '0' COMMENT '部门在当前层级下的顺序,由小到大', `remark` varchar(200) DEFAULT '' COMMENT '备注', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次操作时间', `operate_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新操作者的ip地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4; ``` **权限相关Log表** ``` DROP TABLE IF EXISTS `sys_log`; CREATE TABLE `sys_log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `type` int(11) NOT NULL DEFAULT '0' COMMENT '权限更新的类型,1:部门,2:用户,3:权限模块,4:权限,5:角色,6:角色用户关系,7:角色权限关系', `target_id` int(11) NOT NULL COMMENT '基于type后指定的对象id,比如用户、权限、角色等表的主键', `old_value` text COMMENT '旧值', `new_value` text COMMENT '新值', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新的时间', `operate_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新者的ip地址', `status` int(11) NOT NULL DEFAULT '0' COMMENT '当前是否复原过,0:没有,1:复原过', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4; ``` **角色表** ``` DROP TABLE IF EXISTS `sys_role`; CREATE TABLE `sys_role` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色id', `name` varchar(20) NOT NULL, `type` int(11) NOT NULL DEFAULT '1' COMMENT '角色的类型,1:管理员角色,2:其他', `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态,1:可用,0:冻结', `remark` varchar(200) DEFAULT '' COMMENT '备注', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新的时间', `operate_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新者的ip地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4; ``` **角色-权限关联表** ``` DROP TABLE IF EXISTS `sys_role_acl`; CREATE TABLE `sys_role_acl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_id` int(11) NOT NULL COMMENT '角色id', `acl_id` int(11) NOT NULL COMMENT '权限id', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新的时间', `operate_ip` varchar(200) NOT NULL DEFAULT '' COMMENT '最后一次更新者的ip', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4; ``` **角色-用户表** ``` DROP TABLE IF EXISTS `sys_role_user`; CREATE TABLE `sys_role_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_id` int(11) NOT NULL COMMENT '角色id', `user_id` int(11) NOT NULL COMMENT '用户id', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新的时间', `operate_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新者的ip地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4; ``` **用户表** ``` DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户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(11) NOT NULL DEFAULT '0' COMMENT '用户所在部门的id', `status` int(11) NOT NULL DEFAULT '1' COMMENT '状态,1:正常,0:冻结状态,2:删除', `remark` varchar(200) DEFAULT '' COMMENT '备注', `operator` varchar(20) NOT NULL DEFAULT '' COMMENT '操作者', `operate_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后一次更新时间', `operate_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后一次更新者的ip地址', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4; ``` 详见init.sql #### 安装教程 1. git clone 2. mvn install 3.执行sql脚本,修改对应的数据库连接配置 #### 使用说明 项目地址: http://39.107.242.6:8080/signin.jsp 账号: evan_qb@qq.com 密码: 123456 #### 技术栈 后台: Spring Framework SpringMVC Mybatis Druid数据库连接池 hibernate-validation校验框架 maven构建项目 redis进行缓存 logback日志插件 generator通过数据库逆向工程生成mapper、service、以及实体类 lomback工具的builder对对象进行赋值 前台技术: jquery bootstrap Mustache模板引擎渲染页面 jsp动态页面 ztree树形插件渲染结构树 Bootstrap-duallistbox多选插件维护角色与用户的关系 #### 总结 1.学会自定义异常,并自定义异常处理器,用于捕获各类异常,并将信息返回给前端 2.自定义拦截器用于处理每次请求并打印日志 3.封装API工具类JsonData返回数据给前端 4.使用ThreadLocal将用户信息的Session以及每次请求的request保存起来,需要时直接取出来 5.自定义后台分页模板 6.使用过滤器分别拦截登录请求以及拦截权限控制 7.使用递归遍历树形结构 8.了解jdk1.8新特性,使用流对集合进行遍历 9.自定义校验器,配合校验框架hibernate-validation进行校验 10.封装JsonMapper通用工具类,将对象和Json字符串进行相互转换 11.使用MD5对用户的密码进行加密处理 12.创建Redis连接池对redis的创建和安全关闭进行管理 13.使用PageQuery封装分页常用参数,PageResult返回数据 14.了解PO、DTO的用法