概述
策略(Policy)是针对某类用户角色而打包的权限和子策略组合。合理地设计和使用策略可以更方便地管理用户权限。
策略命名规则
策略由用户命名,规则如下:
- 2~64 个字符
- 以字母开头
- 仅允许使用字母、下划线和数字(_ 、A-Z、a-z、0-9)
一个嬴图实例中的策略不能重名。
查看策略
返回的表名:_policy
返回的表头:name
| graphPrivileges
| systemPrivileges
| propertyPrivileges
| policies
(策略名称、图集权限、系统权限、属性权限、子策略)
// 查看当前实例中的所有策略信息
show().policy()
// 查看当前实例中指定的策略信息
show().policy("<name>")
创建策略
// 在当前实例中创建一个策略
create().policy(
"<name>",
<{}graph_privileges?>,
<[]system_privileges?>,
<[]policies?>,
<{}property_privileges?>
)
其中的数据格式为:
// <{}graph_privileges>
{
"<graph1>":["<graph_privilege>", "<graph_privilege>", ...],
"<graph2>":["<graph_privilege>", "<graph_privilege>", ...],
...
}
// <{}property_privileges>
{
"node": {
"read": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"write": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"deny": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
},
"edge": {
"read": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"write": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
"deny": [
["<graph>", "<@schema?>", "<property?>"],
["<graph>", "<@schema?>", "<property?>"],
...
],
}
}
注1:图集名<graph>
填星号(*)时表示当前实例的所有图集;同理,<@schema>
和<property>
填星号时表示所有schema和所有属性。
注2:参数policy()
采用下标传参法,当不设置前项但需设置后项时,前项需使用空括号占位。
本例创建策略sales,包含对图集default和client的权限UPDATE、系统权限STAT以及所有属性的RAED:
create().policy(
"sales",
{"default": ["UPDATE"], "client":["UPDATE"]},
["STAT"],
[],
{
"node": {"read":[["*","*","*"]]},
"edge": {"read":[["*","*","*"]]}
}
)
修改策略
// 修改当前实例中的某个策略
alter().policy("<name>").set({
graph_privileges: <{}graph_privileges?>,
system_privileges: <[]system_privileges?>,
policies: <[]policies?>,
property_privileges: <{}property_privileges?>
})
其中<{}graph_privileges>
和<{}property_privileges>
的数据格式同创建策略。
本例修改策略sales,使其只包含default图集的UPDATE权限:
alter().policy("sales").set({graph_privileges: {"default": ["UPDATE"]}})
本例修改策略management,使其包含所有图集的权限UPDATE和DELETE、策略sales以及相应的属性权限:
alter().policy("manager").set({
graph_privileges: {"*": ["UPDATE", "DELETE"]},
policies: ["sales"],
property_privileges: {
"node": {
"write": [["default","*","*"]]
},
"edge": {
"write": [["default","*","*"]]
}
}
})
删除策略
// 从当前实例中删除指定策略
drop().policy("<name>")