大家好,欢迎来到IT知识分享网。
前言
最近一直在重写后台系统,对使用的界面与技术进行一次更新。涉及到权限这块,最初考虑引入Shiro,但由于对这个框架理解不太深,并且项目DeadLine在那放着,所以决定自己搞一套,毕竟自己搞的比较熟悉方便维护,也方便二次开发定制。
需求明确
以下是整理的现阶段需求,以后有二期需求再加上
一、用户未登录时,会提示未登录并转到登录界面
二、用户账户被锁定时,会提示被锁定并转到登录界面
三、用户在没有权限时,点击后台按钮会提示无权限
四、菜单要根据给用户分配的角色填充,只出现该角色可展示的菜单
五、不拦截静态资源,如:css、js、html等
六、区分是否是Ajax请求,是的话返回对应json数据
七、用户只能查看自己的产品
数据库设计
需求明确就可以设计数据库了,这个根据项目、业务来。
用户表
产品表
角色表
菜单表
权限表
用户与产品关联表
用户与角色关联表
角色与菜单关联表
角色与权限关联表
以下是对应结构图:
图片:
首先看菜单设计
CREATE TABLE `uadmin_menu` (
`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id',
`MenuName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称',
`ParentId` int(11) NOT NULL COMMENT '父级ID',
`Url` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '菜单链接地址',
`SortOrder` int(11) NOT NULL COMMENT '排序编号',
`CreateDate` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=72 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ParenId是菜单的父级ID,代表着层级关系,例如:根菜单ParenId为0,Id为1,它的子菜单对应的ParenId为1;Url字段对应的是点击打开的网址,因为可能是父级菜单,所以可以为空;SortOrder是菜单的排序编号,主要为了针对性地调整菜单显示的顺序。
再看看权限设计
CREATE TABLE `uadmin_power` (
`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id',
`MenuId` int(11) NOT NULL COMMENT '所属菜单ID',
`PowerCode` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '权限编码',
`PowerName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '权限名称',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
该权限是对应菜单下的方法级权限,可以控制菜单对应界面的按钮。每次用户点击后,有个自定义拦截器去查询是否有该权限;PowerCode字段对应的是菜单界面按钮的权限,该按钮方法上加自定义权限注解,传入权限编码PowerCode
角色设计
CREATE TABLE `uadmin_role` (
`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Id' COMMENT '角色表主键',
`RoleName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',
`Remark` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`CreateDate` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
角色表比较简单,我这里设计的角色是默认无权限的,得与菜单表、权限表相关联。
商品设计
CREATE TABLE `uproduct` (
`appID` int(11) NOT NULL COMMENT '产品识别appID',
`appkey` varchar(255) DEFAULT NULL COMMENT '产品识别appKey',
`appSecret` varchar(255) DEFAULT NULL COMMENT '产品识别appSecret',
PRIMARY KEY (`appID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
商品表也比较简单,可以根据自己的业务需求定制,这主要是做后台用户所属商品关联查询的,对应用户只能查看对应商品。
用户设计
CREATE TABLE `uadmin_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表主键',
`UserName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名',
`Password` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码',
`DepartmentId` int(11) NOT NULL COMMENT '所属部门编号',
`HasLock` bit(1) NOT NULL COMMENT '锁定状态,0为启用,1为禁用',
`CreateDate` datetime NOT NULL COMMENT '生成时间',
`RealName` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '真实姓名',
`Mobile` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
这里跟角色一样,没有超级用户,都是空白权限,需要自己对其定制。HasLock字段表示是否锁定,如果锁定了,拦截器会把该用户操作拦截下来,跳转登录页面。
关联表设计
五张主表之间的关联表,简单来说就是用来做相互的对应关系的,由关联表id,主表id构成。
权限拦截流程设计
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21198.html