Skip to main content

示例

在本节中,我们将举例说明在组织中使用目录权限的方法,以及如何应用这些权限。

用例 💡

在使用目录权限管理时,除其他配置外,还可以使用以下配置:

  1. 可以为特定用户/角色设置实体不可变/部分不可变(只能创建/删除/修改)。例如
    1. 部署 "实体对所有角色都是不可变的,而 "集群 "实体只有蓝图的管理者才能编辑。
    2. 成员可以创建新的Microservice实体,但不允许删除Microservice实体。 2.对于特定用户/角色,每个实体的属性/关系都可以是不可变的。例如,"repository_link "属性对所有角色(除Admin外)都是不可变的。 3.只允许特定用户/角色修改实体owned by their team 。例如,Members 只能编辑属于其团队的 Microservices。 4.可向特定用户或角色授予操作执行权限。例如,您可以允许每个成员创建新的 "部署 "实体,但只有 "部署 "管理员才能执行 "添加资源 "的第 2 天操作。

设置蓝图权限

要为蓝图设置权限,请单击 DevPortal Builder 页面上所需蓝图的权限按钮。 这将打开一个包含权限 JSON 的模态,允许您控制可对蓝图或其实体执行的所有操作。

角色示例

如果要启用 Members 来注册蓝图的实体,可以按如下方式更改 JSON:

{
"entities": {
"register": {
"roles": ["Admin", "Env-moderator", "Member"], // changed from ["Admin", "Env-moderator"]
"users": [],
"teams": [],
"ownedByTeam": false
}
}
}

用户示例

要授予特定用户编辑 deployedAt 关系的权限,请将其添加到用户数组中:

{
"entities": {
"updateRelations": {
"deployedAt": {
"roles": ["Admin", "Env-moderator"],
"users": ["[email protected]"], // changed from []
"teams": [],
"ownedByTeam": false
}
}
}
}

团队范例

要授予特定团队编辑 deployedAt 关系的权限,请将其添加到团队数组中:

{
"entities": {
"updateRelations": {
"deployedAt": {
"roles": ["Admin", "Env-moderator"],
"users": [],
"teams": ["ServiceMaintainers"], // changed from []
"ownedByTeam": false
}
}
}
}

团队所有权范例

有些操作有 "ownedByTeam"(团队所有)flag,这样就可以按团队所有设置权限,而不是按角色或直接分配给用户。

例如,以下 JSON 将允许每个用户(无论其角色如何)对属于其所属团队的Env实体(设置了team属性的实体)执行delete_env操作:

{
"actions": {
"delete_env": {
"execute": {
"roles": ["Admin", "Env-moderator"],
"users": [],
"teams": [],
"ownedByTeam": true // changed from false
}
}
}
}

团队继承

团队继承允许您利用关系自动分配和管理实体所有权。

通过使用 "团队继承",您可以配置实体自动从与之相关的实体继承其 "团队"。

团队继承可以通过在blueprint structure 中添加teamInheritance键来配置。teamInheritance对象有一个path键,表示我们要继承的实体团队蓝图的关系路径。

路径
  • 路径 "键的作用与mirror properties 中的 "路径 "键类似;
  • 路径 "不需要以"$team "元属性结尾,因为它会被推断出来;
  • 团队继承只能使用single 类型关系的路径来配置。

例如,下面的 JSON(添加到蓝图定义)将配置myBlueprint蓝图的实体,使其从myExtraRelatedBlueprint蓝图的实体继承其团队:

{
"identifier": "myBlueprint",
// ...blueprint properties
"teamInheritance": {
"path": "myRelatedBlueprint.myExtraRelatedBlueprint"
}
}
在上面的示例中,关系链是: myBlueprint -> myRelatedBlueprint -> myExtraRelatedBlueprint

Global VS granular permissions

为蓝图实体授予写入权限时,有两个控制级别:

  1. global 权限 - 创建/更新整个实体。例如,允许 Member 用户更新 Env 实体(所有属性和关系)。
  2. 细粒度权限--控制用户/角色在创建或更新实体时可以更新哪些属性和关系。例如,只允许成员用户更新Env实体的slackChannelUrl属性。

要为蓝图引用细粒度权限,可使用 JSON 中的 "updateProperties "和 "updateRelations "字段,请参阅下面的示例:

以下更改将允许 Member 用户仅更新 Env 实体的 slackChannelUrl 属性:

{
"entities": {
"updateProperties": {
"slackChannelUrl": {
"roles": ["Admin", "Env-moderator", "Member"], // changed from ["Admin", "Env-moderator"]
"users": [],
"teams": [],
"ownedByTeam": false
}
}
}
}
使用 global 权限会覆盖任何已设置的细粒度权限。

如果同时设置了两种权限类型,则在评估权限时将引用 global 设置。

在注册新实体时,"更新"、"更新属性 "和 "更新关系 "设置也同样适用。 这意味着用户不能用他没有权限编辑的属性(或关系)注册新实体。