权限管理设计

权限管理设计

问题描述

当前设计为每个用户定义独立的Sidebar文件,如:

  • 张三登录使用 SideBar1.vue
  • 李四登录使用 SideBar2.vue
  • SideBarN.vue

这种设计方式繁琐且臃肿,不易维护和扩展。

解决方案:RBAC(基于角色的访问控制)

采用RBAC思想进行权限管理设计。核心思想是用户 -> 角色 -> 权限。建议从后往前进行数据库表设计。

从后往前数据库表设计步骤

第一步:权限表设计

参考zTree设计权限:zTree v3文档的设计思想,权限表的设计如下:

CREATE TABLE menu (
    menu_id VARCHAR2(32) PRIMARY KEY,
    menu_name VARCHAR2(30),
    menu_url VARCHAR2(30),
    icon VARCHAR2(20),
    is_parent VARCHAR2(2),
    parent_menu_id VARCHAR2(32),
    CONSTRAINT menu_fk FOREIGN KEY(parent_menu_id) REFERENCES menu(menu_id)
);
  • menu_id: 权限菜单的唯一标识
  • menu_name: 权限菜单的名称
  • menu_url: 权限菜单对应的URL
  • icon: 权限菜单的图标
  • is_parent: 是否是父菜单(用于zTree结构)
  • parent_menu_id: 父菜单的ID,用于构建菜单的层级关系

第二步:角色表设计

角色用于分配和管理用户权限,每个角色可以有不同的权限。角色表结构如下:

CREATE TABLE roles (
    role_id VARCHAR2(32) PRIMARY KEY,
    role_name VARCHAR2(20)
);
  • role_id: 角色的唯一标识
  • role_name: 角色的名称

第三步:角色—权限关联表设计

角色和权限之间是多对多的关系,这需要使用第三张表来表示。该表的主键是前面两张表的主键的组合。

-- 创建角色---权限关联(roles_menu)表
CREATE TABLE roles_menu (
    role_id VARCHAR2 (32),
    menu_id VARCHAR2 (32)
);

-- 添加主键
ALTER TABLE roles_menu ADD CONSTRAINT roles_menu_pk PRIMARY KEY (role_id, menu_id);

-- 添加外键
ALTER TABLE roles_menu ADD CONSTRAINT roles_menu_roles_fk FOREIGN KEY (role_id) REFERENCES roles (role_id);
ALTER TABLE roles_menu ADD CONSTRAINT roles_menu_menu_fk FOREIGN KEY (menu_id) REFERENCES menu (menu_id);
  • role_id: 角色的唯一标识
  • menu_id: 权限的唯一标识

第四步:用户表设计

用户表用于定义系统中的所有用户。

CREATE TABLE users (
    user_id VARCHAR2(32) PRIMARY KEY,
    user_name VARCHAR2(30),
    password VARCHAR2(30)
);
  • user_id: 用户的唯一标识
  • user_name: 用户的名称
  • password: 用户的密码

第五步:用户—角色关联表设计

用户和角色之间是多对多的关系,这需要使用第三张表来表示。该表的主键是前面两张表的主键的组合。

-- 创建用户---角色关联(users_roles)表
CREATE TABLE users_roles (
    user_id VARCHAR2(32),
    role_id VARCHAR2(32)
);

-- 添加主键
ALTER TABLE users_roles ADD CONSTRAINT users_roles_pk PRIMARY KEY (user_id, role_id);

-- 添加外键
ALTER TABLE users_roles ADD CONSTRAINT users_roles_users_fk FOREIGN KEY (user_id) REFERENCES users (user_id);
ALTER TABLE users_roles ADD CONSTRAINT users_roles_roles_fk FOREIGN KEY (role_id) REFERENCES roles (role_id);
  • user_id: 用户的唯一标识
  • role_id: 角色的唯一标识

最终实现

通过角色来管理用户的权限,实现动态Sidebar的加载。具体步骤如下:

  1. 用户登录后,系统根据用户ID获取其对应的角色。
  2. 根据角色获取其对应的权限菜单。
  3. 动态生成用户的Sidebar。

通过这种设计,可以实现基于角色的访问控制,动态地为用户分配不同的权限,简化系统的维护和扩展。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值