权限系统的基本概念和架构

简介: 权限系统的基本概念和架构

目录



简介


权限系统是我们在系统设计和应用中一种非常常见的系统。一般来说权限系统的功能分为认证和授权两种。认证就非常简单的,验证完用户名密码就算认证成功,而授权里面的套路就很多了,本文将会详细讲解权限系统中的一些基本概念和设计上面要注意的问题,希望大家能够喜欢。


授权流程


在授权流程中主要有三个部分,分别是资源管理,权限和策略管理,策略的执行。


先看下资源管理:


image.png


首先我们需要创建一个资源服务器,然后在资源服务器中创建各种资源,最后对各种资源设置一些scope,scope就是跟资源相关的的一些可执行的操作。


什么是资源呢?资源可以是一个web页面,一个RESTful资源,一个文件等等。


举个例子,假如我们有一个图书馆资源服务器,图书馆有一个本《人月神话》的书,那么这本书就被称作资源。接下来我们需要为这个资源定义一些可操作性的scope,或者说策略。比如说只有本校的学生才能够借阅这本书。


当我们定义好资源之后,就需要对这些资源进行一些权限和策略的设置,这就需要进行权限和策略管理。


看下权限和策略管理的流程:


image.png


首先是创建策略,然后定义权限,最后将权限和策略进行关联。


策略就是定义的一些去访问某些资源或者权限的操作,策略是和具体的权限是分离的,策略只制定了在什么情况下可以做(某些事情),或者在某些情况下不能做(某些事情),这些事情就是后面创建的权限。


比如说,拥有user角色可以做什么事情,就是一种策略。


策略定义好了,我们就可以创建权限了,权限很好理解,比如:借《人月神话》的书的权限。


我们把策略和权限组合起来就是:拥有user角色的,可以借《人月神话》这本书。


通用的策略有很多种,比如说基于属性的访问策略,基于角色的访问策略,基于用户的访问策略,基于上下文的访问策略,基于时间的访问策略,基于规则的访问策略或者其他的自定义策略等。


通常来说,基于角色的访问策略role-based access control (RBAC)是最常用的。


我们把用户赋予相应的角色,然后在访问资源的时候根据不同的角色策略来执行不同的permission操作。


虽然RBAC非常有用,用途也非常广泛,但是它还是有下面的几个缺点:


  1. 资源和角色是强绑定的,如果我们对角色进行一些添加,删除和修改操作,将会影响到所有相关联的资源。
  2. 对于角色的修改则可能需要我们对代码进行修改。
  3. 如果你的应用程序非常大的话,使用RBAC可能会出现一些错误。
  4. RBAC的灵活性不够强,不能够做到更加细粒度的权限控制。


最后,我们看一下策略的执行。


策略的执行就是真正的在资源服务器上执行相应的授权工作。一般来说我们在资源服务器中有一个 Policy Enforcement Point(PEP)来和授权服务器进行交互,根据授权服务器返回的授权信息来执行相应的资源操作。


权限系统的架构


先看一张权限系统的基本架构图:


image.png


其中有下面几个关键组件:


  • PAP全称是Policy Administration Point,它是一个权限管理的后台页面,我们需要这样的一个后台界面来配置和管理权限和资源。
  • PDP全称是Policy Decision Point,它提供了一些决策策略,通过这些策略将授权请求发送到相应的位置,并根据请求的权限对策略进行相应的决策。
  • PEP全称是Policy Enforcement Point,在不同的资源服务器中执行相应的策略。
  • PIP全称是Policy Information Point,在判断和决策策略的时候,可以从中获取相应的属性信息。


上图中,Storage就是数据的存储和分类,这里我们主要存储resouce,scope,permission和policy这4种对象。


resource代表的是要访问的对象,可以是一个或者多个对象的集合。比如说:web程序中的页面等等。资源是受保护的对象,需要为资源配置一些权限。


每个资源都有一个唯一的标识符,可以代表一个资源或一组资源。 例如,你可以管理一个银行帐户资源,该资源代表并定义了所有银行帐户的一组授权策略。 但是,你也可以使用另一个名为Alice's Banking Account的资源,该资源代表由单个客户拥有的单个资源,该资源可以具有自己的一组授权策略。


我们看一个resource的例子:


image.png


上图中,我们将不同的URI定义为resource。并给不同的resource起了唯一的名字。


Scope是对资源的一系列操作,比如你可以对资源进行读,写或者编辑,删除操作,这些都可以被称之为scope。当然,你也可以指定resource中的某个属性作为scope。


然后就是Permission,权限将受保护的对象与是否授予访问权限的策略相关联。


比如我们有下面一个权限:


X CAN DO Y ON RESOURCE Z


x表示的是一个或者多个用户,角色或者groups,或者是他们的组合。


Y表示的是对资源的一种操作。


Z就是资源了,比如/index页面。


我们可以创建基于resource的permission:


image.png


也可以创建基于scope的permission:


image.png

Policy定义了要授予对象访问权限必须满足的条件。Policy并没有指明要保护的对象,只是指定了访问给定对象必须满足的条件。


image.png

比如上面的Policy,指定了什么样的角色,针对什么样的client,制定出来的什么样的逻辑。


有了策略就需要一个Policy Provider,Policy Provider主要为我们提供特定策略类型的实现。


为了做好策略评估的工作,我们还需要一个策略评估引擎,通过这个engine来执行策略的评估工作。


除此之外,作为一个认证服务器,我们还需要对外提供认证服务,那么最好的办法就是提供OAuth2或者OpenID Connect的token服务。


另外我们还需要一个Protection API,用于resource server和权限管理服务进行交互。

相关文章
|
5月前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
4月前
|
数据采集 机器学习/深度学习 运维
量化合约系统开发架构入门
量化合约系统核心在于数据、策略、风控与执行四大模块的协同,构建从数据到决策再到执行的闭环工作流。强调可追溯、可复现与可观测性,避免常见误区如重回测轻验证、忽视数据质量或滞后风控。初学者应以MVP为起点,结合回测框架与实时风控实践,逐步迭代。详见相关入门与实战资料。
|
5月前
|
JSON 文字识别 BI
如何开发车辆管理系统中的加油管理板块(附架构图+流程图+代码参考)
本文针对中小企业在车辆加油管理中常见的单据混乱、油卡管理困难、对账困难等问题,提出了一套完整的系统化解决方案。内容涵盖车辆管理系统(VMS)的核心功能、加油管理模块的设计要点、数据库模型、系统架构、关键业务流程、API设计与实现示例、前端展示参考(React + Antd)、开发技巧与工程化建议等。通过构建加油管理系统,企业可实现燃油费用的透明化、自动化对账、异常检测与数据分析,从而降低运营成本、提升管理效率。适合希望通过技术手段优化车辆管理的企业技术人员与管理者参考。
|
5月前
|
消息中间件 缓存 JavaScript
如何开发ERP(离散制造-MTO)系统中的生产管理板块(附架构图+流程图+代码参考)
本文详解离散制造MTO模式下的ERP生产管理模块,涵盖核心问题、系统架构、关键流程、开发技巧及数据库设计,助力企业打通计划与执行“最后一公里”,提升交付率、降低库存与浪费。
|
4月前
|
前端开发 JavaScript BI
如何开发车辆管理系统中的车务管理板块(附架构图+流程图+代码参考)
本文介绍了中小企业如何通过车务管理模块提升车辆管理效率。许多企业在管理车辆时仍依赖人工流程,导致违章处理延误、年检过期、维修费用虚高等问题频发。将这些流程数字化,可显著降低合规风险、提升维修追溯性、优化调度与资产利用率。文章详细介绍了车务管理模块的功能清单、数据模型、系统架构、API与前端设计、开发技巧与落地建议,以及实现效果与验收标准。同时提供了数据库建表SQL、后端Node.js/TypeScript代码示例与前端React表单设计参考,帮助企业快速搭建并上线系统,实现合规与成本控制的双重优化。
|
5月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
5月前
|
消息中间件 JavaScript 前端开发
如何开发ERP(离散制造-MTO)系统中的技术管理板块(附架构图+流程图+代码参考)
本文详解ERP(离散制造-MTO)系统中的技术管理板块,涵盖产品定义、BOM、工序、工艺文件及变更控制的结构化与系统化管理。内容包括技术管理的核心目标、总体架构、关键组件、业务流程、开发技巧与最佳实践,并提供完整的参考代码,助力企业将技术数据转化为可执行的生产指令,提升制造效率与质量。
|
5月前
|
人工智能 监控 测试技术
告别只会写提示词:构建生产级LLM系统的完整架构图​
本文系统梳理了从提示词到生产级LLM产品的八大核心能力:提示词工程、上下文工程、微调、RAG、智能体开发、部署、优化与可观测性,助你构建可落地、可迭代的AI产品体系。
753 52
|
4月前
|
机器学习/深度学习 人工智能 缓存
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
本文提出面向边缘通用智能的多大语言模型(Multi-LLM)系统,通过协同架构、信任机制与动态编排,突破传统边缘AI的局限。融合合作、竞争与集成三种范式,结合模型压缩、分布式推理与上下文优化技术,实现高效、可靠、低延迟的边缘智能,推动复杂场景下的泛化与自主决策能力。
395 3
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
|
4月前
|
人工智能 自然语言处理 安全
AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教系统融合大语言模型、教育知识图谱、多模态交互与智能体架构,实现精准学情诊断、个性化辅导与主动教学。支持图文语音输入,本地化部署保障隐私,重构“教、学、评、辅”全链路,推动因材施教落地,助力教育数字化转型。(238字)
798 23