当前位置: 首页 > news >正文

【权限控制】一个通用的用户权限控制架构设计方案,可以适用于大多数应用场景

在设计用户权限控制的架构时,需要考虑系统的安全性、可扩展性、灵活性以及易维护性。以下是一个通用的用户权限控制架构设计方案,可以适用于大多数应用场景:

1. 架构概览

用户权限控制通常分为三个核心部分:用户管理(User Management)角色管理(Role Management)权限管理(Permission Management)。通过这三个部分的组合,实现对不同用户的权限控制。

2. 角色模型设计

2.1 用户(User)

每个用户都是系统中的一个实体,用户模型包含如下信息:

  • 用户ID(UserID):唯一标识用户的ID。
  • 用户名(Username):用户的登录名。
  • 密码(Password):用户的加密密码。
  • 邮箱(Email):用户的联系邮箱。
  • 状态(Status):用户是否激活、锁定、禁用等状态。
  • 角色列表(Roles):用户所拥有的角色集合。
2.2 角色(Role)

角色是权限的载体,将权限赋予角色,再将角色分配给用户。

  • 角色ID(RoleID):唯一标识角色的ID。
  • 角色名称(RoleName):描述角色的名称,如管理员、编辑者、查看者等。
  • 角色描述(Description):对角色的功能描述。
  • 权限列表(Permissions):角色所拥有的权限集合。
2.3 权限(Permission)

权限是系统中可以被控制的操作或资源。

  • 权限ID(PermissionID):唯一标识权限的ID。
  • 权限名称(PermissionName):权限的具体操作,如read_userwrite_article等。
  • 权限描述(Description):对权限的功能描述。

3. 权限控制策略

3.1 RBAC模型(Role-Based Access Control)

RBAC是一种基于角色的权限控制模型,通过角色与用户和权限的关联来管理权限,适用于大多数应用场景。

  • 用户-角色映射(User-Role Mapping):将用户与角色进行关联,一个用户可以拥有多个角色。
  • 角色-权限映射(Role-Permission Mapping):将角色与权限进行关联,一个角色可以拥有多个权限。
  • 权限检查(Permission Check):在用户请求资源或操作时,系统会验证用户的角色是否拥有该操作的权限。
3.2 ACL模型(Access Control List)

ACL是一种访问控制列表模型,更加细粒度的控制用户对具体资源的操作权限。通常在有复杂权限需求时使用。

  • 用户-资源-权限映射(User-Resource-Permission Mapping):将用户、资源和权限三者进行关联。

4. 数据库设计

基于RBAC模型的数据库表设计:

  1. 用户表(User Table)

    CREATE TABLE User (UserID INT PRIMARY KEY AUTO_INCREMENT,Username VARCHAR(50) NOT NULL,Password VARCHAR(255) NOT NULL,Email VARCHAR(100) UNIQUE,Status ENUM('Active', 'Inactive', 'Locked') DEFAULT 'Active'
    );
    
  2. 角色表(Role Table)

    CREATE TABLE Role (RoleID INT PRIMARY KEY AUTO_INCREMENT,RoleName VARCHAR(50) NOT NULL UNIQUE,Description VARCHAR(255)
    );
    
  3. 权限表(Permission Table)

    CREATE TABLE Permission (PermissionID INT PRIMARY KEY AUTO_INCREMENT,PermissionName VARCHAR(50) NOT NULL UNIQUE,Description VARCHAR(255)
    );
    
  4. 用户角色关联表(User_Role Table)

    CREATE TABLE User_Role (UserID INT,RoleID INT,FOREIGN KEY (UserID) REFERENCES User(UserID),FOREIGN KEY (RoleID) REFERENCES Role(RoleID),PRIMARY KEY (UserID, RoleID)
    );
    
  5. 角色权限关联表(Role_Permission Table)

    CREATE TABLE Role_Permission (RoleID INT,PermissionID INT,FOREIGN KEY (RoleID) REFERENCES Role(RoleID),FOREIGN KEY (PermissionID) REFERENCES Permission(PermissionID),PRIMARY KEY (RoleID, PermissionID)
    );
    

5. API接口设计

5.1 用户管理接口
  • 注册用户POST /api/users/register
  • 更新用户信息PUT /api/users/{id}
  • 删除用户DELETE /api/users/{id}
5.2 角色管理接口
  • 创建角色POST /api/roles
  • 更新角色信息PUT /api/roles/{id}
  • 删除角色DELETE /api/roles/{id}
5.3 权限管理接口
  • 创建权限POST /api/permissions
  • 更新权限信息PUT /api/permissions/{id}
  • 删除权限DELETE /api/permissions/{id}
5.4 权限分配接口
  • 分配角色给用户POST /api/users/{id}/roles
  • 分配权限给角色POST /api/roles/{id}/permissions

6. 权限控制流程

  1. 用户登录:用户提交用户名和密码,系统验证身份,生成并返回JWT令牌。
  2. 权限验证:每次用户请求受保护的资源时,系统从JWT令牌中解析用户信息和角色,并根据用户角色检查是否有该操作的权限。
  3. 拒绝访问:如果用户没有权限,则返回403 Forbidden错误。

7. 扩展性考虑

  1. 多级角色继承:支持角色之间的继承关系,使得角色的管理更加灵活。
  2. 动态权限管理:支持在运行时动态添加、删除和修改角色和权限,不需要重启系统。
  3. 缓存机制:对于频繁访问的权限数据,使用缓存机制提高性能。

8. 安全性考虑

  1. 密码加密存储:使用安全算法(如bcrypt)对用户密码进行加密存储。
  2. JWT安全传输:JWT令牌要使用安全的签名和加密方式,确保数据不被篡改。
  3. 操作日志记录:记录所有权限变更和重要操作,方便审计和追踪。

该架构方案适用于中大型系统,可以在不同业务场景下灵活调整。

代码实现可见

【FasAPI】使用FastAPI来实现一个基于RBAC(基于角色的访问控制)的用户权限控制系统

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [数组计数法]#116. 开会时间
  • 戏曲多多 1.0.6.0 专为电视端设计的戏曲与生活内容APP,同样适用于安卓手机,方便老年人使用
  • 学习C4模型的新网站
  • 传奇开服需要多少钱?传奇开服服务器是自己买还是租?
  • Unity DOTS系列之托管/非托管Component的区别与性能分析
  • 一起操作一遍git,还不会你找我
  • tensorflow算子调用示例(MINIST)
  • 【项目实战】如何在项目中基于 Spring Boot Starter 开发简单的 SDK
  • ARM基础知识点及简单汇编语法
  • 【数据结构-栈】力扣71. 简化路径
  • 【计算机网络 - 基础问题】每日 3 题(二十一)
  • YOLOv8 OBB win10+ visual 2022移植部署
  • 【2023次方 / B】
  • 王红梅老师ppt介绍算法设计一般过程---对上周csdn的补充----可以参考老版教师用书--单链表专题在介绍插入时介绍了正向思维方法,这是更详细的解释跟全面
  • iptables和nftables
  • [译] 怎样写一个基础的编译器
  • 【node学习】协程
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • java中的hashCode
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Mysql优化
  • NSTimer学习笔记
  • PHP的Ev教程三(Periodic watcher)
  • Spring Cloud中负载均衡器概览
  • SSH 免密登录
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • VuePress 静态网站生成
  • Vultr 教程目录
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • - 概述 - 《设计模式(极简c++版)》
  • 关于List、List?、ListObject的区别
  • 模型微调
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 删除表内多余的重复数据
  • 温故知新之javascript面向对象
  • Java性能优化之JVM GC(垃圾回收机制)
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​力扣解法汇总946-验证栈序列
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (zhuan) 一些RL的文献(及笔记)
  • (差分)胡桃爱原石
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转载)深入super,看Python如何解决钻石继承难题
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET Core跨平台微服务学习资源
  • .NET 读取 JSON格式的数据
  • .net操作Excel出错解决
  • .net项目IIS、VS 附加进程调试
  • .NET周刊【7月第4期 2024-07-28】