以下是原型设计图
用户管理
权限管理
角色管理
数据库设计
DROP TABLE IF EXISTS `t_role`;
CREATE TABLE `t_role` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`pid` bigint(20) NOT NULL COMMENT '父角色',
`name` varchar(20) NOT NULL COMMENT '角色名称',
`authorities` json NOT NULL COMMENT '权限(Id:名称),示例:[{2:列表},{1:添加}]',
`creator` varchar(20) NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间',
`updator` varchar(20) NOT NULL COMMENT '更新人',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色表';
DROP TABLE IF EXISTS `t_authority`;
CREATE TABLE `t_authority` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`pid` bigint(20) NOT NULL COMMENT '父级id',
`name` varchar(20) NOT NULL COMMENT '权限名称',
`uri` varchar(64) NOT NULL COMMENT '访问的接口路径(不包含父级),如/list、/update',
`type` int NOT NULL COMMENT '1是公共权限,2是私有权限',
`creator` varchar(20) NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间',
`updator` varchar(20) NOT NULL COMMENT '更新人',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限表';
DROP TABLE IF EXISTS `t_data_authority`;
CREATE TABLE `t_authority` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`authority_id` bigint(20) NOT NULL COMMENT '权限id',
`meaning` varchar(20) NOT NULL COMMENT '字段意义',
`feild` varchar(38) NOT NULL COMMENT '字段名',
`symbol` varchar(8) NOT NULL COMMENT '数据过滤符号,= != > <',
`data` json NOT NULL COMMENT '规则数据,{"vip","svip"}',
`creator` varchar(20) NOT NULL COMMENT '创建人',
`create_time` datetime NOT NULL COMMENT '创建时间',
`updator` varchar(20) NOT NULL COMMENT '更新人',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据权限表';
实现思路
前端
每一个权限都会有标识,前端就是根据这个标识来决定这个功能是否展示,如果在登陆后,后端返回的数据中是没有这个标识的,则隐藏。
后端
后端不需要使用任何框架。
后端在系统启动时,就把数据权限表、权限表、角色表的数据,全部加载到Redis中。
用户在登陆时,验证成功后,则查出用户对应的信息与权限,并拼接好权限的完整URI(父级URI,完整的URI是类似:/member/info/add),并缓存到Redis中,以及返回给前端。
拦截器,先判断用户是否已登录,在判断此URI是否是公有URI,是的话,则直接放行,否则就根据访问的URI进行拦截,如果在缓存中没有找到其用户对应接口访问的URI的权限,则返回,并告知,无权限操作。
在后续的权限验证过程中,建议新建一个公共项目,这个项目就是专门验证数据权限的,并且如果是特殊的数据权限处理,则通过不同的包名做区分,如果后面流量到了,要可以单独部署。
无论在什么项目中,这个都作为基础模块,如果有别的功能需要用到不同的权限或角色,例如部门管理,不同部门看到不同的数据,那么则通过部门关联到对应的角色即可,一通百通。
账号管理
系统接口管理
代理服务管理
内部服务接口管理
系统信息配置