本文共 2271 字,大约阅读时间需要 7 分钟。
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的权限,则返回,并告知,无权限操作。
在后续的权限验证过程中,建议新建一个公共项目,这个项目就是专门验证数据权限的,并且如果是特殊的数据权限处理,则通过不同的包名做区分,如果后面流量到了,要可以单独部署。
无论在什么项目中,这个都作为基础模块,如果有别的功能需要用到不同的权限或角色,例如部门管理,不同部门看到不同的数据,那么则通过部门关联到对应的角色即可,一通百通。
转载地址:http://krmxi.baihongyu.com/