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

权限系统基础知识笔记

自我简介:4年导游,10年程序员,最近6年一直深耕低代码领域,分享低代码和AI领域见解。

一直想实现一套相对完善的权限控制系统。在实践过程中总结了一些权限相关的基础知识。准备基于 go-micro + Casbin + And-Design-Pro 实现 RBAC 模型的权限管理.

仓库地址:Accbase

在项目中经常有的场景是不同的用户的权限不同。

常有如下场景:

  • 不同的用户在页面中可以看到的元素和操作不同
  • 不同的用户对页面的访问权限不同

权限是什么?

权限管理是后台系统经常会涉及的模块,主要是对不同的用户访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,账号过期,隐私数据泄露等问题。

功能划分

权限管理系统总体分为:授权与认证

  1. 授权:指将权限授予角色或用户。
  2. 认证:指用户访问资源的某些操作时,根据授权,判断是否允许用户的访问。

基础概念

权限模型
  1. RBAC模型,基于角色的访问控制(Role-Based Access Control)。抽象为Who(权限的拥有者或主体 Group,Role)对What(Which)(权限针对的对象或资源)进行How(具体的权限)的操作。通过角色关联用户,角色关联权限的方式间接赋予用户权限,构成“用户-角色-权限-资源”的授权模型。
  2. ABAC模型,基于属性的访问控制(Attribute-Based Access Control)。四个核心元素分别为:用户、资源、环境和操作。用户是请求访问系统资源的实体,可以是个人、程序或设备。资源是需要保护的系统实体,如文件、数据库、应用程序等。环境包括访问发生时的上下文信息,如时间、地点、安全级别等。操作是用户请求对资源执行的行为,如读取、写入、删除等。
权限名词
  1. 资源 (Resources):资源就是想要的到的最终物质。菜单、页面、按钮、API、数据等均为资源。
  2. 用户 (User):是发起操作的主体,按类型分可分为2B和2C用户,可以是后台管理系统的用户等。
  3. 角色(Role):是中间量,连接了用户和权限的关系,每个角色可以关联多个权限,同时一个用户关联多个角色,那么这个用户就有了多个角色的多个权限。使得授权操作便捷易拓展。角色不能随意删除或禁用。角色支持继承和互斥(如用户不能同时具备申请和审批人的角色)
  4. 权限 (Permissions):是用户可以访问的资源。
    • 页面权限:即用户登录系统可以看到的页面,由菜单来控制,菜单包括一级菜单和二级菜单,只要用户有一级和二级菜单的权限,那么用户就可以访问页面。
    • 操作权限:即页面的功能按钮,包括查看,新增,修改,删除,审核等,用户点击删除按钮时,后台会校验用户角色下的所有权限是否包含该删除权限。
    • 数据权限:即不同用户在同一页面看到的数据是不同的,比如财务部只能看到其部门下的用户数据,比如杭州分公司用户登录系统只能看到杭州的数据。(解决方案一般是把数据和具体的组织架构关联起来,举个例子,在给用户授权的时候,用户选择某个角色同时绑定组织如财务部或者合肥分公司,那么该用户就有了该角色下财务部或合肥分公司下的的数据权限)
  5. 用户组 (Group):当平台用户基数增大,角色类型增多时,管理员直接给用户组分配角色,用户组里的每个用户即可拥有该角色,而不用操作每个用户完成授权。
  6. 组织(Organization):可以把组织与角色进行关联,用户加入组织后,就会自动获得该组织的全部角色,无须管理员手动授予,同时用户在调岗时,只需调整组织,角色即可批量调整。组织的另外一个作用是控制数据权限,把角色关联到组织,那么该角色只能看到该组织下的数据权限。组织是一个集合。
  7. 职位(Post):每个组织部门下都会有多个职位,每个职位的权限是不同的。职位是针对人的个体。
  8. 菜单(Menu):用户登录系统可以看到的页面,可以有多层级。
  9. 策略:是模型中定义访问规则的语句,描述了在什么条件下可以执行哪些操作。策略通常由安全管理员定义,并可以随时更新以适应组织的变化。
关联关系
  1. 用户和角色是多对一/多的关系
  2. 角色和权限是多对多的关系
授权流程
  1. 手动授权:给用户添加角色,给角色添加用户。给用户添加角色就是在用户管理页面,点击某个用户去授予角色,可以一次为用户添加多个角色;给角色添加用户就是在角色管理页面,点击某个角色,选择多个用户,实现了给批量用户授予角色的目的。
  2. 审批授权:即用户申请某个职位角色,那么用户通过OA流程申请该角色,然后由上级审批,该用户即可拥有该角色,不需要系统管理员手动授予。

权限系统需求

  1. 系统拥有一个超级管理员,拥有系统所有权限
  2. 不同的用户在页面中可以看到的元素和操作不同
  3. 不同的用户对页面的访问权限不同
  4. 操作包括:增删改查审核等
  5. 用户拥有多个角色,那么用户的权限是这些角色权限的合集
  6. 授权操作时选中即生效,无需提交
  7. 用户(User)(帐号)可以拥有多个角色(Role),角色可以被分配给多个用户
  8. 每个用户组的管理员都具有创建角色的能力,并且自己管理这自己的角色
  9. 每个用户组的管理员都有添加用户,授予用户权限的能力
  10. 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码等,权限是被分离出去了的。用户(User)要拥有对某种资源的权限,必须通过角色(Role)去关联。
  11. 角色是使用权限的基本单位,拥有一定数量的权限,通过角色赋予用户权限
  12. 权限指用户根据角色获得对程序某些功能的操作,例如对文件的读、写、修改和删除功能
  13. 账号有效期
  14. 注意区分角色和职位
  15. 给组织的总部分配账号。组织的管理员,然后自己维护下级数据

数据表

  1. 用户表(帐号)(UserInfo)(将用户的最基本的信息进行管理(在正常的业务系统中可进行扩展用户信息),比如姓名、有效期等)
  2. 角色表(RoleInfo)(对角色基本信息进行管理。用户可以自定义成各种各样的角色)
  3. 菜单表(MenuInfo)
  4. 用户角色表(UserRole)(在用户与角色之间建立起关联,给用户授予哪些角色权限(同一用户可以有多个角色),也可以按角色添加用户,比如将“员工”角色授予公司所有人,而不用按用户一个一个地授权)
  5. 角色菜单表(RoleMenu)
  6. 角色权限表 (RolePromissions) (将角色与系统中的权限点关联起来,也就是完成授权的动作)
  7. 操作表 (Action)(用来存放用户自定义的各种功能操作,比如新增、修改、删除等)
  8. 页面元素表 (Element)

AI时代,对各行业的冲击力只会越来越大,随着AI大模型的竞赛,越来越多强悍的AI模型都会涌现,像软件开发行业的很多工作都会被取代。软件将不再是程序员的专属产物,会由AI创建很多的软件产品。

4年导游,10年程序员,深耕低代码领域6年,持续分享低代码和AI领域领域有价值的思考和沉淀,欢迎关注:winyh5

后续会推出:【挑战365天做 100 套常见的互联网系统】系列文章,让大家可以真实感受到低代码快速落地项目的可行性


http://www.mrgr.cn/news/93595.html

相关文章:

  • CUDA计时函数:精确测量GPU代码执行时间
  • Linux | Vim 鼠标不能右键粘贴、跨系统复制粘贴
  • 【leetcode hot 100 206】反转链表
  • PDF文档中表格以及形状解析-后续处理(长线段根据交点打断成短线段)
  • Pytest自动化框架
  • 当AI开始“思考“:拆解大模型训练与推理的秘密(以DeepSeek为例)
  • Linux云计算SRE-第十七周
  • MAC电脑常用操作
  • leetcode日记(84)交错字符串
  • pyside6学习专栏(九):在PySide6中使用PySide6.QtCharts绘制6种不同的图表的示例代码
  • Docker 部署 Vaultwarden
  • π0及π0_fast的源码解析——一个模型控制7种机械臂:对开源VLA sota之π0源码的全面分析,含我司微调π0的部分实践
  • 【使用hexo模板创建个人博客网站】
  • 点云数据处理--splat转3dtiles
  • Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...
  • RSA的理解运用与Pycharm组装Cryptodome库
  • Networking Based ISAC Hardware Testbed and Performance Evaluation
  • vite:初学 p5.js demo 画圆圈
  • 大语言模型学习--向量数据库基础知识
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数