We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
数据权限方案设计
r-nacos系统支持对不同访问者,根据其对应数据权限配置实现数据隔离功能。
实现目标的方案会有多种。为了找到比较合适的方案,这里梳理补充了一些约束条件与规则,用于一些场景有多种选择时做判断。
r-nacos包含注册中心与配置中心两部分内容。因为配置中心对数据权限更敏感,同时两者的维度也差不多;所以本方分析时只需以配置中心为准,后面注册中心使用其相同的方案即可。
目前的常用使用场景如上图:开发运维用户通过控制台管理应用配置,应用通过SDK OpenApi访问应用配置。
图中用户、应用、配置都有多个,我们可以考虑以用户、应用、配置为基本对象设计对应的数据隔离方案。
其中用户、配置在r-nacos已经是现有的对象,本次我们可以引入应用这个对象。 应用这个对象在现实中也是一个具体的容易理解的对象,建立用户与应用的数据访问关系,应用拥有的配置关系,理论上即可确定数据隔离关系。
引入用户对象后,上面的场景逻辑上可以划分为:
场景分析后我们可以识别出3个主体对象:用户、应用、配置。
配置是nacos现有的模型对象,其的核心信息是配置主键与配置内容。
目前配置的联合主键是:命名空间 + 配置分组 + 配置ID ;
主键字段说明:
配置分组,是一个可自定义的抽象概念,所以我们可以考虑使用配置分组与应用建立关系。
一个配置只有一个主应用,为了简单可以考虑应用与配置分组建立一个一对一关系,即配置分组值等于对应的应用名。 一个应用的配置可以共享给其它应用,应用配置共享关系单独维护,由应用管理员发起,并设置对应的共享读写访问权限。
一个应用的配置,有多个环境,为了兼容现有的nacos配置模型,可以把命名空间当做应用环境。
一个用户需要同时拥有应用权限和环境(命名空间)权限,才能访问对应的配置数据。
用户是nacos现有的模型对象,用于系统识别访问者并做权限隔离。
r-nacos目前只支持功能权限隔离,本次为了支持数据权限隔离,需要配合配置的数据权限隔离维度,分别维护用户与应用、用户与命名空间(环境)的权限。
不同的用户可访问、操作的应用权限是不同的,这个可以认为是用户与应用关系中的属性类型信息不同。
那么用户与应用应该有哪些类型属性呢?
我们可以先识别主要的关系。
可以管理应用配置,同时可以管理应用成员。
可以管理应用配置。
只可以查询应用配置,不能编辑。
一个用户可以有多个命名空间权限,用户管理中需要支持配置用户所拥有的命名空间权限列表。
用户是nacos现有的模型对象,本次没有调整其内容只延伸它的概念,把它当成应用环境,用于做环境数据隔离。
命名空间相关的关系在配置、用户部分以有描述,这里就不展开。
应用是本次计划新增的模型。
可以把应用当成一种特殊的角色,用于做应用数据隔离。
通过建立用户与应用的关系,应用与配置的关系,可对用户实现按用户维度做数据权限隔离。
其关系在用户部分已有对应描述,这里不展开。
应用与用户关系的管理,由用户管理员维护,可以考虑放在应用部分管理。
定义上应用的id与配置分组id一致,不需要单据管理。
应用配置共享,可以由应用管理员维护,支持把本应用配置共享给其它应用,应用配置共享考虑放在应用部分管理。
上面分析的核心对象(用户、应用、命名、配置)与关系中,应用与配置、环境与配置默认关系是确定的,只要分别维护好用户与应用,和用户与环境(命名空间)关系,即可根据关系对用户访问的配置数据进行过滤。
The text was updated successfully, but these errors were encountered:
【2024-12-17 补充】
数据权限的功能可以分为三大块:关系管理、控制台数据权限控制、接口数据权限控制;
大体的功能内容如下:
设计大体基本完成,准备投入开发,一些内容可以在开发时再细化。
Sorry, something went wrong.
No branches or pull requests
数据权限方案设计
目标
r-nacos系统支持对不同访问者,根据其对应数据权限配置实现数据隔离功能。
1. 约束条件与规则
实现目标的方案会有多种。为了找到比较合适的方案,这里梳理补充了一些约束条件与规则,用于一些场景有多种选择时做判断。
2. 场景分析
r-nacos包含注册中心与配置中心两部分内容。因为配置中心对数据权限更敏感,同时两者的维度也差不多;所以本方分析时只需以配置中心为准,后面注册中心使用其相同的方案即可。
目前的常用使用场景如上图:开发运维用户通过控制台管理应用配置,应用通过SDK OpenApi访问应用配置。
图中用户、应用、配置都有多个,我们可以考虑以用户、应用、配置为基本对象设计对应的数据隔离方案。
其中用户、配置在r-nacos已经是现有的对象,本次我们可以引入应用这个对象。
应用这个对象在现实中也是一个具体的容易理解的对象,建立用户与应用的数据访问关系,应用拥有的配置关系,理论上即可确定数据隔离关系。
引入用户对象后,上面的场景逻辑上可以划分为:
场景分析后我们可以识别出3个主体对象:用户、应用、配置。
3. 核心对象关系分析与设计
3.1 配置
配置是nacos现有的模型对象,其的核心信息是配置主键与配置内容。
目前配置的联合主键是:命名空间 + 配置分组 + 配置ID ;
主键字段说明:
配置分组,是一个可自定义的抽象概念,所以我们可以考虑使用配置分组与应用建立关系。
3.1.1 配置与应用的关系
一个配置只有一个主应用,为了简单可以考虑应用与配置分组建立一个一对一关系,即配置分组值等于对应的应用名。
一个应用的配置可以共享给其它应用,应用配置共享关系单独维护,由应用管理员发起,并设置对应的共享读写访问权限。
3.1.2 配置与命名空间(环境)的关系
一个应用的配置,有多个环境,为了兼容现有的nacos配置模型,可以把命名空间当做应用环境。
一个用户需要同时拥有应用权限和环境(命名空间)权限,才能访问对应的配置数据。
3.2 用户
用户是nacos现有的模型对象,用于系统识别访问者并做权限隔离。
r-nacos目前只支持功能权限隔离,本次为了支持数据权限隔离,需要配合配置的数据权限隔离维度,分别维护用户与应用、用户与命名空间(环境)的权限。
3.2.1 用户与应用的关系
不同的用户可访问、操作的应用权限是不同的,这个可以认为是用户与应用关系中的属性类型信息不同。
那么用户与应用应该有哪些类型属性呢?
我们可以先识别主要的关系。
3.2.1.1 应用管理员
可以管理应用配置,同时可以管理应用成员。
3.2.1.2 应用成员
可以管理应用配置。
3.2.1.3 应用访客
只可以查询应用配置,不能编辑。
3.2.2 用户与命名空间(环境)的关系
一个用户可以有多个命名空间权限,用户管理中需要支持配置用户所拥有的命名空间权限列表。
3.3 命名空间
用户是nacos现有的模型对象,本次没有调整其内容只延伸它的概念,把它当成应用环境,用于做环境数据隔离。
命名空间相关的关系在配置、用户部分以有描述,这里就不展开。
3.4 应用
应用是本次计划新增的模型。
可以把应用当成一种特殊的角色,用于做应用数据隔离。
通过建立用户与应用的关系,应用与配置的关系,可对用户实现按用户维度做数据权限隔离。
3.4.1 应用与用户的关系
其关系在用户部分已有对应描述,这里不展开。
应用与用户关系的管理,由用户管理员维护,可以考虑放在应用部分管理。
3.4.2 应用与配置的关系
定义上应用的id与配置分组id一致,不需要单据管理。
应用配置共享,可以由应用管理员维护,支持把本应用配置共享给其它应用,应用配置共享考虑放在应用部分管理。
3.5 主要模型实体与其对应关系
核心类图
上面分析的核心对象(用户、应用、命名、配置)与关系中,应用与配置、环境与配置默认关系是确定的,只要分别维护好用户与应用,和用户与环境(命名空间)关系,即可根据关系对用户访问的配置数据进行过滤。
The text was updated successfully, but these errors were encountered: