最近一直在重写后台系统,对使用的界面与技术进行一次更新。涉及到权限这块,最初考虑引入Shiro,但由于对这个框架理解不太深,并且项目DeadLine在那放着,所以决定自己搞一套,毕竟自己搞的比较熟悉方便维护,也方便二次开发定制。
以下是整理的现阶段需求,以后有二期需求再加上
需求明确就可以设计数据库了,这个根据项目、业务来。
用户表
产品表
角色表
菜单表
权限表
用户与产品关联表
用户与角色关联表
角色与菜单关联表
角色与权限关联表
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构成。