问题与背景
web系统的设计中,往往都会遇到权限问题,权限问题,最起码需要做到3个级别,模块级别,功能级别,数据级别。模块级别粒度是最粗的,只需要在五表权限模型中的权限表,设置为模块的访问权限即可。功能级别粒度会细一些,主要是针对模块中的功能进行选择性开放。数据级别是最高的,实现了完全的基于权限的数据隔离,通俗点说就是用户只能看到自己的数据,无法看到别人的数据。本文章主要针对多用户数据隔离的场景进行设计。
经验总结
先来梳理一下表结构设计,想要实现多用户数据隔离的表结构设计,这里在五表权限的基础上,新增了一张工作空间表。
用户表
字段 | 解释 |
---|---|
id | 主键 |
username | 姓名 |
角色表
字段 | 解释 |
---|---|
id | 主键 |
rolename | 角色姓名 |
权限表
字段 | 解释 |
---|---|
id | 主键 |
authname | 权限名称 |
工作空间表
字段 | 解释 |
---|---|
id | 主键 |
spacename | 空间名称 |
用户角色关联表
字段 | 解释 |
---|---|
id | 主键 |
user_id | 用户id |
role_id | 角色id |
角色权限关联表
字段 | 解释 |
---|---|
id | 主键 |
auth_id | 权限id |
role_id | 角色id |
空间用户关联表
字段 | 解释 |
---|---|
id | 主键 |
user_id | 用户id |
space_id | 空间id |
使用方式与优势:
1.建立工作空间表之后,所有需要做隔离的数据表,都增加工作空间外键,跟工作空间表关联。用户登录之后,选择工作空间进行数据的管理。
2.为什么不直接跟用户挂钩呢?web系统中往往会出现领导看下属数据的场景,工作空间一方面可以跟用户自己挂钩,还可以跟用户的领导挂钩,数据的可见性有了很大的灵活度。
3.为什么不跟角色挂钩?还是同样的原因,挂在角色上,粒度太粗了,不灵活。