通用的权限设计方案
总结:其实除了很多复杂业务 以外 有很多是 抽取出来 万能 通用的 业务模型,例如权限设计,组织机构 等。
通用的基本 就5 张表,用户 <- 用户角色 ->角色<- 角色权限 ->权限
权限主要 有菜单 按钮,链接
思路 就是 通过 角色 这个中间桥梁 关联起 用户的权限,基本通用 所有 业务,可能有些业务 还需要 用这个基础 模型 稍加改造 而已,95% 的基本套用 就行。
过几天写一下 页面,先亮出 表设计,到时候提供 自定义拦截器实现,shiro 实现,springsercurty 实现,没错就是折磨简单。
/* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50723 Source Host : localhost:3306 Source Database : demo01 Target Server Type : MYSQL Target Server Version : 50723 File Encoding : 65001 Date: 2019-12-23 16:16:52 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for sys_permissions -- ---------------------------- DROP TABLE IF EXISTS `sys_permissions`; CREATE TABLE `sys_permissions` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `permission` varchar(100) NOT NULL COMMENT '权限编号', `description` varchar(100) NOT NULL COMMENT '权限描述', `rid` bigint(20) NOT NULL COMMENT '此权限关联角色的id', `type` varchar(50) NOT NULL COMMENT '类型 1 菜单 2 按钮', `url` varchar(200) NOT NULL COMMENT 'url', `sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段', `external` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否外部链接 1 是 0不是', `parent_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '父级id', `available` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否锁定', `icon` varchar(100) NOT NULL COMMENT '菜单图标', `create_time` datetime NOT NULL COMMENT '添加时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_sys_permissions_permission` (`permission`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sys_permissions -- ---------------------------- -- ---------------------------- -- Table structure for sys_roles -- ---------------------------- DROP TABLE IF EXISTS `sys_roles`; CREATE TABLE `sys_roles` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色编号', `role` varchar(100) NOT NULL COMMENT '角色名称', `description` varchar(100) NOT NULL COMMENT '角色描述', `pid` bigint(20) NOT NULL COMMENT '父节点', `available` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否锁定', `create_time` datetime NOT NULL COMMENT '添加时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_sys_roles_role` (`role`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sys_roles -- ---------------------------- -- ---------------------------- -- Table structure for sys_roles_permissions -- ---------------------------- DROP TABLE IF EXISTS `sys_roles_permissions`; CREATE TABLE `sys_roles_permissions` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `role_id` bigint(20) NOT NULL COMMENT '角色编号', `permission_id` bigint(20) NOT NULL COMMENT '权限编号', `create_time` datetime NOT NULL COMMENT '添加时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sys_roles_permissions -- ---------------------------- -- ---------------------------- -- Table structure for sys_users -- ---------------------------- DROP TABLE IF EXISTS `sys_users`; CREATE TABLE `sys_users` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `username` varchar(100) NOT NULL COMMENT '用户名', `password` varchar(100) NOT NULL COMMENT '密码', `salt` varchar(100) NOT NULL COMMENT '盐值', `role_id` varchar(50) NOT NULL COMMENT '角色列表', `locked` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否锁定', `reg_ip` varchar(30) NOT NULL COMMENT '注册IP', `last_login_ip` varchar(30) NOT NULL COMMENT '最近登录IP', `last_login_time` datetime NOT NULL COMMENT '最近登录时间', `login_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数', `create_time` datetime NOT NULL COMMENT '注册时间', `update_time` datetime NOT NULL COMMENT '更新时间', `version` int(11) NOT NULL DEFAULT '0' COMMENT '版本号', PRIMARY KEY (`id`), UNIQUE KEY `idx_sys_users_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sys_users -- ---------------------------- -- ---------------------------- -- Table structure for sys_users_roles -- ---------------------------- DROP TABLE IF EXISTS `sys_users_roles`; CREATE TABLE `sys_users_roles` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `user_id` bigint(20) NOT NULL COMMENT '用户编号', `role_id` bigint(20) NOT NULL COMMENT '角色编号', `create_time` datetime NOT NULL COMMENT '添加时间', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of sys_users_roles -- ----------------------------
elk