权限菜单管理设计

发布时间 2023-07-28 13:55:01作者: wj704
权限菜单管理需求&设计

需求描述

一般的管理后台都涉及到主要分菜单,按钮两种资源。
  • 前端根据登录用户的信息只允许访问该用户拥有的菜单页面,没有权限的操作按钮不显示或置灰。
  • 后端根据登录用户的权限控制是否可访问受权限控制的接口。
 
  • 有什么样的菜单跟管理后台的业务相关,一般可由超级管理员配置。
  • 角色权限划分/用户分配角色一般由拥有“用户管理员”权限的账号操作。

流程

  1. 超级管理员创建资源权限信息(菜单/按钮),或部署前初始化好数据。
 
 
 
 
  1. 管理后台“用户管理”员创建角色,为角色分配拥有的资源权限。
(这里权限菜单不跟创建角色放在一起,从角色操作的“绑定权限”按钮点击编辑)
 
  1. 管理后台“用户管理”员为系统的各账号分配角色。
 
暂时无法在飞书文档外展示此内容
  1. 系统各账号登录系统后只能访问操作由权限的资源。

数据表设计

  1. 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='权限表';
  2. 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='角色表';
  1. 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='角色与权限对照表';
  1. 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='账号与角色对照表';

接口

  1. 登录接口,获取用户信息接口
  2. 权限(目录菜单按钮)增删改查
  3. 角色增删改查
  4. 分配账号角色增删改查