权限菜单管理需求&设计
需求描述
一般的管理后台都涉及到主要分菜单,按钮两种资源。- 前端根据登录用户的信息只允许访问该用户拥有的菜单页面,没有权限的操作按钮不显示或置灰。
- 后端根据登录用户的权限控制是否可访问受权限控制的接口。
- 有什么样的菜单跟管理后台的业务相关,一般可由超级管理员配置。
- 角色权限划分/用户分配角色一般由拥有“用户管理员”权限的账号操作。
流程
- 超级管理员创建资源权限信息(菜单/按钮),或部署前初始化好数据。
- 管理后台“用户管理”员创建角色,为角色分配拥有的资源权限。
- 管理后台“用户管理”员为系统的各账号分配角色。
- 系统各账号登录系统后只能访问操作由权限的资源。
数据表设计
-
permission。权限表:记录各种资源权限信息。分三种类型,目录/菜单/按钮
-- permission definition CREATE TABLE `permission` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) NOT NULL DEFAULT '0' COMMENT '父级id', `name` varchar(255) NOT NULL COMMENT '权限名称', `alias` varchar(255) DEFAULT NULL COMMENT '别名', `key` varchar(255) DEFAULT NULL COMMENT '权限全局ID,类型为目录可空', `components` varchar(64) DEFAULT NULL COMMENT '前端页面路径,类型为按钮可空', `sort` int(4) DEFAULT '0' COMMENT '显示顺序升序', `type` char(1) DEFAULT NULL COMMENT '类型(M目录 C菜单 F按钮)', `icon` varchar(100) DEFAULT NULL COMMENT '图标', `visible` tinyint(1) NOT NULL DEFAULT '0' COMMENT '菜单状态(0显示 1隐藏)', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '菜单状态(0正常 1停用)', `update_by` varchar(64) DEFAULT NULL COMMENT '最后操作人', `update_time` int(10) DEFAULT NULL COMMENT '最后操作时间戳', `remark` varchar(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';
- role。角色表
-- role definition
CREATE TABLE `role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL COMMENT '角色名字',
`created_id` bigint(20) unsigned NOT NULL COMMENT '创建者ID',
`key` varchar(32) NOT NULL COMMENT '全局标识,跟permission.key区分开',
`status` tinyint(3) NOT NULL DEFAULT '0' COMMENT '状态 0正常 1停用',
`update_by` varchar(64) DEFAULT NULL COMMENT '最后操作人id',
`update_time` int(11) DEFAULT NULL COMMENT '最后操作时间戳',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`is_del` tinyint(3) DEFAULT '0' COMMENT '0正常 1删除',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
- role_permission。角色与权限对照关系
-- role_permission definition
CREATE TABLE `role_permission` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`permission_id` int(11) NOT NULL COMMENT '权限id',
`role_id` int(11) NOT NULL COMMENT '角色id',
PRIMARY KEY (`id`),
UNIQUE KEY `role_permi_unique` (`role_id`,`permission_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 CHARSET=utf8mb4 COMMENT='角色与权限对照表';
- user_role。用户与角色对照关系
-- user_role definition
CREATE TABLE `user_role` (
`uid` bigint(20) unsigned NOT NULL COMMENT '用户id',
`role_id` int(11) NOT NULL COMMENT '角色id',
`created_at` int(10) unsigned NOT NULL COMMENT '绑定时间',
UNIQUE KEY `uid_role_id_index` (`uid`,`role_id`) USING BTREE,
KEY `uid_index` (`uid`) USING BTREE,
KEY `role_id_index` (`role_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账号与角色对照表';
接口
- 登录接口,获取用户信息接口
- 权限(目录菜单按钮)增删改查
- 角色增删改查
- 分配账号角色增删改查