示例
在本节中,我们将举例说明在组织中使用目录权限的方法,以及如何应用这些权限。
用例 💡
在使用目录权限管理时,除其他配置外,还可以使用以下配置:
- 可以为特定用户/角色设置实体不可变/部分不可变(只能创建/删除/修改)。例如
- 部署 "实体对所有角色都是不可变的,而 "集群 "实体只有蓝图的管理者才能编辑。
- 成员可以创建新的
Microservice
实体,但不允许删除Microservice
实体。 2.对于特定用户/角色,每个实体的属性/关系都可以是不可变的。例如,"repository_link "属性对所有角色(除Admin外)都是不可变的。 3.只允许特定用户/角色修改实体owned by their team 。例如,Members 只能编辑属于其团队的Microservices
。 4.可向特定用户或角色授予操作执行权限。例如,您可以允许每个成员创建新的 "部署 "实体,但只有 "部署 "管理员才能执行 "添加资源 "的第 2 天操作。
设置蓝图权限
要为蓝图设置权限,请单击 DevPortal Builder 页面上所需蓝图的权限按钮。 这将打开一个包含权限 JSON 的模态,允许您控制可对蓝图或其实体执行的所有操作。
角色示例
- Let member register entity
- Only let admin update property
如果要启用 Members 来注册蓝图的实体,可以按如下方式更改 JSON:
{
"entities": {
"register": {
"roles": ["Admin", "Env-moderator", "Member"], // changed from ["Admin", "Env-moderator"]
"users": [],
"teams": [],
"ownedByTeam": false
}
}
}
要只允许 Admins 更改属性 slackChannelUrl
,请删除版主角色:
{
"entities": {
"updateProperties": {
"slackChannelUrl": {
"roles": ["Admin"], // changed from ["Admin", "Env-moderator"]
"users": [],
"teams": [],
"ownedByTeam": false
}
}
}
}
用户示例
- Let user edit relation
要授予特定用户编辑 deployedAt
关系的权限,请将其添加到用户数组中:
{
"entities": {
"updateRelations": {
"deployedAt": {
"roles": ["Admin", "Env-moderator"],
"users": ["[email protected]"], // changed from []
"teams": [],
"ownedByTeam": false
}
}
}
}
团队范例
- Let team edit relation
要授予特定团队编辑 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"
}
}
Global VS granular permissions
为蓝图实体授予写入权限时,有两个控制级别:
- global 权限 - 创建/更新整个实体。例如,允许 Member 用户更新
Env
实体(所有属性和关系)。 - 细粒度权限--控制用户/角色在创建或更新实体时可以更新哪些属性和关系。例如,只允许成员用户更新
Env
实体的slackChannelUrl
属性。
要为蓝图引用细粒度权限,可使用 JSON 中的 "updateProperties "和 "updateRelations "字段,请参阅下面的示例:
- Let user edit property
- Let user edit entity
以下更改将允许 Member 用户仅更新 Env
实体的 slackChannelUrl
属性:
{
"entities": {
"updateProperties": {
"slackChannelUrl": {
"roles": ["Admin", "Env-moderator", "Member"], // changed from ["Admin", "Env-moderator"]
"users": [],
"teams": [],
"ownedByTeam": false
}
}
}
}
如果要引用全局权限,请使用 JSON 中的 update
字段。
以下更改将允许 Member 用户更新其团队拥有的 Env
实体的每一个属性/关系:
{
"entities": {
"update": {
"roles": ["Admin", "Env-moderator"],
"users": [],
"teams": [],
"ownedByTeam": true // changed from false
}
}
}
如果同时设置了两种权限类型,则在评估权限时将引用 global 设置。