遗留自定义对象权限
重要的是:基于关系的访问控制处于早期访问阶段。此API可能会更改,不应在生产环境中使用。
您可以通过实现策略来定制请求的授权。每一个遗留对象类型和遗留关系类型具有定义基于角色的访问控制(RBAC)的策略。每个遗留对象类型都有零个或多个策略来定义基于关系的访问控制(ReBAC)。
遗留对象类型或关系类型上的RBAC策略向代理和最终用户授予创建、读取、更新和删除权限对象记录或关系的记录那种类型的。如果您提供代理和最终用户RBAC读取权限,那么它们也可以读取类型。
遗留对象类型上的ReBAC策略不
授予代理和最终用户额外的读取和更新权限。每个ReBAC策略指定一个源对象类型的关系类型禅宗:用户
目标对象类型是不
。如果该类型的现有遗留关系记录从发出请求的用户指向类型为的遗留对象记录不
,然后ReBAC策略向对象记录授予读取和更新权限。换句话说,对象类型上的RBAC策略可能禁止代理或最终用户读取或更新该类型的遗留对象记录,但是遗留对象类型上的ReBAC策略可以允许用户读取或更新该类型的特定对象记录。
JSON格式
权限表示为具有以下属性的JSON对象:
名字 | 类型 | 只读 | 强制性的 | 描述 |
---|---|---|---|---|
rbac | 对象 | 假 | 假 | 对象类型的RBAC策略 |
rebac | 对象 | 假 | 假 |
关系类型策略由具有以下属性的JSON对象定义:
名字 | 类型 | 可写的 | 要求 | 评论 |
---|---|---|---|---|
rbac | 对象 | 是的 | 是的 | 关系类型的RBAC策略 |
RBAC策略由一个JSON对象组成,该对象具有以下属性:
名字 | 类型 | 可写的 | 要求 | 评论 |
---|---|---|---|---|
管理 | 对象 | 是的 | 没有 | 管理员的CRUD权限定义 |
代理 | 对象 | 是的 | 没有 | 代理的CRUD权限定义 |
end_user | 对象 | 是的 | 没有 | 最终用户的CRUD权限定义 |
自定义 | 对象 | 是的 | 没有 | 自定义代理角色的CRUD权限定义。在此对象中,每个属性将自定义代理角色映射到CRUD权限定义。 |
ReBAC策略由一个JSON对象组成,该对象具有以下属性:
名字 | 类型 | 可写的 | 要求 | 评论 |
---|---|---|---|---|
管理 | 对象 | 是的 | 没有 | 管理员的RU(读/更新)权限定义 |
代理 | 对象 | 是的 | 没有 | 座席RU权限定义 |
end_user | 对象 | 是的 | 没有 | 终端用户的RU权限定义 |
自定义 | 对象 | 是的 | 没有 | 自定义代理角色的RU权限定义。在此对象中,每个属性将自定义代理角色映射到RU权限定义。 |
一个CRUD权限定义由一个JSON对象组成,具有以下属性:
名字 | 类型 | 可写的 | 要求 | 评论 |
---|---|---|---|---|
创建 | 布尔 | 是的 | 没有 | |
读 | 布尔 | 是的 | 没有 | |
更新 | 布尔 | 是的 | 没有 | |
删除 | 布尔 | 是的 | 没有 |
RU(读/更新)权限定义由一个JSON对象组成,该对象具有以下属性:
名字 | 类型 | 可写的 | 要求 | 评论 |
---|---|---|---|---|
读 | 布尔 | 是的 | 没有 | |
更新 | 布尔 | 是的 | 没有 |
自定义代理角色的策略
在Enterprise计划中,管理员可以定义自定义代理角色,并将这些角色分配给任何代理。看到创建自定义角色和分配代理(企业)在帮助中心。
RBAC或ReBAC策略可以有遗留自定义
对象定义代理的权限自定义代理角色。对象指定自定义角色的ID和权限策略,根据父角色是RBAC还是ReBAC,可以是CRUD或RU策略。
属性获取自定义角色的id列表自定义角色端点。不验证自定义角色id以查看是否存在对应的角色。
如果自定义代理角色策略中的任何权限值未指定(对于CRUD权限定义为创建、读取、更新或删除,对于RU权限定义为读取或更新),则未指定的值将使用值false填充。
如果请求是由具有自定义代理角色的用户发出的,但是没有为该自定义代理角色创建策略,则将使用作为请求主题的对象或关系类型的现有代理权限处理该请求。
如果请求是由具有自定义代理角色的用户发出的,并且存在针对该自定义角色的策略,则该策略将覆盖授予该用户的正常代理权限。
例子
{
“数据”:{
“rbac”:{
“代理”:{
“创造”:真正的,
“读”:真正的,
“更新”:假,
“删除”:假
},
“自定义”:{
“8237”:{
“创造”:假,
“读”:真正的,
“更新”:真正的,
“删除”:假
}
}
},
“rebac”:{
“user_to_many_products”:{
“end_user”:{
“更新”:真正的
},
“自定义”:{
“8237”:{
“读”:真正的,
“更新”:假
}
}
}
}
}
}
默认的基于角色的访问控制(RBAC)策略
当创建遗留对象类型或关系类型时,将向该类型发出默认RBAC策略。默认RBAC策略用于对遗留对象记录或与遗留对象类型或关系类型相关联的关系记录上的任何传入请求强制执行授权规则。默认RBAC策略中定义的权限如下。
{
“admin”:{
“创造”:真正的,
“读”:真正的,
“更新”:真正的,
“删除”:真正的
},
“代理”:{
“创造”:真正的,
“读”:真正的,
“更新”:真正的,
“删除”:真正的
},
“end_user”:{
“创造”:假,
“读”:假,
“更新”:假,
“删除”:假
}
}
默认的基于关系的访问控制(ReBAC)策略
在遗留对象类型上创建ReBAC策略时,不需要指定所有权限。如果定义省略了某些权限,则其默认值如下。
{
“admin”:{
“读”:真正的,
“更新”:真正的
},
“代理”:{
“读”:假,
“更新”:假
},
“end_user”:{
“读”:假,
“更新”:假
}
}
最后一个包含所有属性的完整示例。
例子
{
“rbac”:{
“代理”:{
“创造”:真正的,
“删除”:假,
“读”:真正的,
“更新”:真正的
},
“自定义”:{
“8237”:{
“创造”:假,
“删除”:假,
“读”:真正的,
“更新”:真正的
}
},
“end_user”:{
“读”:真正的
}
},
“rebac”:{
“user_to_many_products”:{
“自定义”:{
“8237”:{
“读”:真正的,
“更新”:真正的
}
},
“end_user”:{
“更新”:真正的
}
}
}
}
显示遗留对象类型策略
GET / api /阳光/对象/类型/ {object_type_key} /权限
返回指定对象的策略遗留对象类型。
允许
- 代理
参数
名字 | 类型 | 在 | 要求 | 描述 |
---|---|---|---|---|
object_type_key | 字符串 | 路径 | 真正的 | key属性是您自己定义的遗留对象类型的唯一标识符 |
代码示例
旋度
旋度https://{子域名}.亚博zendesk.com/api/sunshine/objects/types/{object_type_key}/权限\
- v - u{email_address}:{密码}
去
进口(
“fmt”
“输入输出”
“net/http”
)
函数主要(){
url:=“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”
方法:=“获得”
要求的事情,犯错:=http。NewRequest(方法,url,零)
如果犯错! =零{
fmt。Println(犯错)
返回
}
要求的事情。头。添加(“内容类型”,“application / json”)
客户端:=&http。客户端{}
res,犯错:=客户端。做(要求的事情)
如果犯错! =零{
fmt。Println(犯错)
返回
}
推迟res。身体。关闭()
身体,犯错:=io。ReadAll(res。身体)
如果犯错! =零{
fmt。Println(犯错)
返回
}
fmt。Println(字符串(身体))
}
Java
进口com。squareup。okhttp。*;
OkHttpClient客户端=新OkHttpClient();
HttpUrl。构建器urlBuilder=HttpUrl。解析(“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”)
。newBuilder();
请求请求=新请求。构建器()
。url(urlBuilder。构建())
。方法(“获得”,零)
。addHeader(“内容类型”,“application / json”)
。构建();
响应响应=客户端。newCall(请求)。执行();
Nodejs
varaxios=需要(“axios”);
var配置={
方法:“得到”,
url:“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”,
头:{
“内容类型”:“application / json”,
},
};
axios(配置)
。然后(函数(响应){
控制台。日志(JSON。stringify(响应。数据));
})
。抓(函数(错误){
控制台。日志(错误);
});
Python
进口请求
url=“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”
头={
“内容类型”:“application / json”,
}
响应=请求。请求(
“获得”,
url,
头=头
)
打印(响应。文本)
鲁比(人名)
需要“net/http”
uri=URI(“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”)
请求=网::HTTP::得到。新(uri,“内容类型”:“application / json”)
响应=网::HTTP。开始uri。主机名,uri。港口,use_ssl:真正的做|http|
http。请求(请求)
结束
示例响应(年代)
200好了
//状态200 OK
{
“数据”:{
“rbac”:{
“admin”:{
“创造”:真正的,
“删除”:真正的,
“读”:真正的,
“更新”:真正的
},
“代理”:{
“创造”:真正的,
“删除”:真正的,
“读”:真正的,
“更新”:真正的
},
“end_user”:{
“创造”:假,
“删除”:假,
“读”:假,
“更新”:假
}
}
}
}
更新遗留对象类型策略
补丁/ api /阳光/对象/类型/ {object_type_key} /权限
更新指定的策略遗留对象类型。如果没有对RBAC策略进行更新,则默认RBAC策略使用。如果一个请求为遗留对象类型创建了一个新的ReBAC策略,并且ReBAC策略中省略了一个属性,则默认回退策略使用。如果请求更新了现有的RBAC策略或ReBAC策略,并且省略了某个属性,则使用前一个策略中的相应属性。
允许
- 管理员
参数
名字 | 类型 | 在 | 要求 | 描述 |
---|---|---|---|---|
object_type_key | 字符串 | 路径 | 真正的 | key属性是您自己定义的遗留对象类型的唯一标识符 |
代码示例
旋度
为了清晰起见,示例将JSON放在一个单独的文件中,并将其导入到cURL语句中。
policies.json
{
“数据”:{
“rbac”:{
“代理”:{
“创造”:真正的,
“读”:真正的,
“更新”:真正的,
“删除”:假
},
“end_user”:{
“读”:真正的
}
},
“rebac”:{
“user_to_many_products”:{
“end_user”:{
“更新”:真正的
}
}
}
}
}
旋度片段
旋度https://{子域名}.亚博zendesk.com/api/sunshine/objects/types/{object_type_key}/权限\
- d @policies.json\
- h“内容类型:应用程序/ merge-patch + json”- x片\
- v - u{email_address}:{密码}
去
进口(
“fmt”
“输入输出”
“net/http”
)
函数主要(){
url:=“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”
方法:=“补丁”
要求的事情,犯错:=http。NewRequest(方法,url,零)
如果犯错! =零{
fmt。Println(犯错)
返回
}
要求的事情。头。添加(“内容类型”,“application / json”)
客户端:=&http。客户端{}
res,犯错:=客户端。做(要求的事情)
如果犯错! =零{
fmt。Println(犯错)
返回
}
推迟res。身体。关闭()
身体,犯错:=io。ReadAll(res。身体)
如果犯错! =零{
fmt。Println(犯错)
返回
}
fmt。Println(字符串(身体))
}
Java
进口com。squareup。okhttp。*;
OkHttpClient客户端=新OkHttpClient();
HttpUrl。构建器urlBuilder=HttpUrl。解析(“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”)
。newBuilder();
RequestBody身体=RequestBody。创建(MediaType。解析(“application / json”),
”“”
”“”);
请求请求=新请求。构建器()
。url(urlBuilder。构建())
。方法(“补丁”,身体)
。addHeader(“内容类型”,“application / json”)
。构建();
响应响应=客户端。newCall(请求)。执行();
Nodejs
varaxios=需要(“axios”);
var配置={
方法:“补丁”,
url:“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”,
头:{
“内容类型”:“application / json”,
},
};
axios(配置)
。然后(函数(响应){
控制台。日志(JSON。stringify(响应。数据));
})
。抓(函数(错误){
控制台。日志(错误);
});
Python
进口请求
url=“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”
头={
“内容类型”:“application / json”,
}
响应=请求。请求(
“补丁”,
url,
头=头
)
打印(响应。文本)
鲁比(人名)
需要“net/http”
uri=URI(“https://support.亚博zendesk.com/api/sunshine/objects/types/product/permissions”)
请求=网::HTTP::补丁。新(uri,“内容类型”:“application / json”)
响应=网::HTTP。开始uri。主机名,uri。港口,use_ssl:真正的做|http|
http。请求(请求)
结束
示例响应(年代)
200好了
//状态200 OK
{
“数据”:{
“rbac”:{
“admin”:{
“创造”:真正的,
“删除”:真正的,
“读”:真正的,
“更新”:真正的
},
“代理”:{
“创造”:真正的,
“删除”:假,
“读”:真正的,
“更新”:真正的
},
“end_user”:{
“创造”:假,
“删除”:假,
“读”:真正的,
“更新”:假
}
},
“rebac”:{
“user_to_many_products”:{
“admin”:{
“读”:真正的,
“更新”:真正的
},
“代理”:{
“读”:假,
“更新”:假
},
“end_user”:{
“读”:假,
“更新”:真正的
}
}
}
}
}
显示遗留关系类型策略
得到阳光/ api / / /类型/ {relationship_type_key} /权限的关系
返回指定对象的策略遗留关系类型。
允许
- 代理
参数
名字 | 类型 | 在 | 要求 | 描述 |
---|---|---|---|---|
relationship_type_key | 字符串 | 路径 | 真正的 | 遗留关系类型的键 |
代码示例
旋度
旋度https://{子域名}.亚博zendesk.com/api/sunshine/relationships/types/{relationship_type_key}/权限\
- v - u{email_address}:{密码}
去
进口(
“fmt”
“输入输出”
“net/http”
)
函数主要(){
url:=“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”
方法:=“获得”
要求的事情,犯错:=http。NewRequest(方法,url,零)
如果犯错! =零{
fmt。Println(犯错)
返回
}
要求的事情。头。添加(“内容类型”,“application / json”)
客户端:=&http。客户端{}
res,犯错:=客户端。做(要求的事情)
如果犯错! =零{
fmt。Println(犯错)
返回
}
推迟res。身体。关闭()
身体,犯错:=io。ReadAll(res。身体)
如果犯错! =零{
fmt。Println(犯错)
返回
}
fmt。Println(字符串(身体))
}
Java
进口com。squareup。okhttp。*;
OkHttpClient客户端=新OkHttpClient();
HttpUrl。构建器urlBuilder=HttpUrl。解析(“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”)
。newBuilder();
请求请求=新请求。构建器()
。url(urlBuilder。构建())
。方法(“获得”,零)
。addHeader(“内容类型”,“application / json”)
。构建();
响应响应=客户端。newCall(请求)。执行();
Nodejs
varaxios=需要(“axios”);
var配置={
方法:“得到”,
url:“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”,
头:{
“内容类型”:“application / json”,
},
};
axios(配置)
。然后(函数(响应){
控制台。日志(JSON。stringify(响应。数据));
})
。抓(函数(错误){
控制台。日志(错误);
});
Python
进口请求
url=“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”
头={
“内容类型”:“application / json”,
}
响应=请求。请求(
“获得”,
url,
头=头
)
打印(响应。文本)
鲁比(人名)
需要“net/http”
uri=URI(“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”)
请求=网::HTTP::得到。新(uri,“内容类型”:“application / json”)
响应=网::HTTP。开始uri。主机名,uri。港口,use_ssl:真正的做|http|
http。请求(请求)
结束
示例响应(年代)
200好了
//状态200 OK
{
“数据”:{
“rbac”:{
“admin”:{
“创造”:真正的,
“删除”:真正的,
“读”:真正的,
“更新”:真正的
},
“代理”:{
“创造”:真正的,
“删除”:真正的,
“读”:真正的,
“更新”:真正的
},
“end_user”:{
“创造”:假,
“删除”:假,
“读”:假,
“更新”:假
}
}
}
}
更新遗留关系类型策略
补丁/ api /阳光/ /类型/ {relationship_type_key} /权限的关系
更新指定的策略遗留关系类型。如果没有对RBAC策略进行更新,则默认RBAC策略使用。不能为遗留关系类型创建ReBAC策略。如果请求更新了现有的RBAC策略或ReBAC策略,并且省略了某个属性,则使用前一个策略中的相应属性。
允许
- 管理员
参数
名字 | 类型 | 在 | 要求 | 描述 |
---|---|---|---|---|
relationship_type_key | 字符串 | 路径 | 真正的 | 遗留关系类型的键 |
代码示例
旋度
为了清晰起见,示例将JSON放在一个单独的文件中,并将其导入到cURL语句中。
policies.json
{
“数据”:{
“rbac”:{
“代理”:{
“创造”:真正的,
“读”:真正的,
“更新”:真正的,
“删除”:假
},
“end_user”:{
“读”:真正的
}
}
}
}
旋度片段
旋度https://{子域名}.亚博zendesk.com/api/sunshine/relationships/types/{relationship_type_key}/权限\
- d @policies.json\
- h“内容类型:应用程序/ merge-patch + json”- x片\
- v - u{email_address}:{密码}
去
进口(
“fmt”
“输入输出”
“net/http”
)
函数主要(){
url:=“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”
方法:=“补丁”
要求的事情,犯错:=http。NewRequest(方法,url,零)
如果犯错! =零{
fmt。Println(犯错)
返回
}
要求的事情。头。添加(“内容类型”,“application / json”)
客户端:=&http。客户端{}
res,犯错:=客户端。做(要求的事情)
如果犯错! =零{
fmt。Println(犯错)
返回
}
推迟res。身体。关闭()
身体,犯错:=io。ReadAll(res。身体)
如果犯错! =零{
fmt。Println(犯错)
返回
}
fmt。Println(字符串(身体))
}
Java
进口com。squareup。okhttp。*;
OkHttpClient客户端=新OkHttpClient();
HttpUrl。构建器urlBuilder=HttpUrl。解析(“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”)
。newBuilder();
RequestBody身体=RequestBody。创建(MediaType。解析(“application / json”),
”“”
”“”);
请求请求=新请求。构建器()
。url(urlBuilder。构建())
。方法(“补丁”,身体)
。addHeader(“内容类型”,“application / json”)
。构建();
响应响应=客户端。newCall(请求)。执行();
Nodejs
varaxios=需要(“axios”);
var配置={
方法:“补丁”,
url:“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”,
头:{
“内容类型”:“application / json”,
},
};
axios(配置)
。然后(函数(响应){
控制台。日志(JSON。stringify(响应。数据));
})
。抓(函数(错误){
控制台。日志(错误);
});
Python
进口请求
url=“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”
头={
“内容类型”:“application / json”,
}
响应=请求。请求(
“补丁”,
url,
头=头
)
打印(响应。文本)
鲁比(人名)
需要“net/http”
uri=URI(“https://support.亚博zendesk.com/api/sunshine/relationships/types/suppliers/permissions”)
请求=网::HTTP::补丁。新(uri,“内容类型”:“application / json”)
响应=网::HTTP。开始uri。主机名,uri。港口,use_ssl:真正的做|http|
http。请求(请求)
结束
示例响应(年代)
200好了
//状态200 OK
{
“数据”:{
“rbac”:{
“admin”:{
“创造”:真正的,
“删除”:真正的,
“读”:真正的,
“更新”:真正的
},
“代理”:{
“创造”:真正的,
“删除”:假,
“读”:真正的,
“更新”:真正的
},
“end_user”:{
“创造”:假,
“删除”:假,
“读”:真正的,
“更新”:假
}
},
“rebac”:{}
}
}