Vue d’ensemble
Une stratégie est une combinaison de multiples privilèges emballés pour un rôle utilisateur spécifique, elle comprend souvent plusieurs privilèges et sous-stratégies. Les privilèges utilisateur peuvent être gérés plus efficacement et de manière plus pratique avec une conception et une utilisation appropriées de la stratégie.
Conventions de Nommage
Les stratégies sont nommées par les développeurs. Un même nom ne peut être partagé entre les stratégies dans une instance Ultipa.
- 2 ~ 64 caractères
- Doit commencer par une lettre
- Permet d'utiliser des lettres, des underscores et des chiffres ( _ , A-Z, a-z, 0-9)
Afficher la Stratégie
Nom de la table retournée: _policy
En-tête de la table retournée: name
| graphPrivileges
| systemPrivileges
| propertyPrivileges
| policies
(le nom, les privilèges de graph, les privilèges de système, les privilèges de propriété et les sous-stratégies de la stratégie)
Syntaxe:
// Pour afficher toutes les stratégies dans l'instance Ultipa actuelle
show().policy()
// Pour afficher une certaine stratégie dans l'instance Ultipa actuelle
show().policy("<name>")
Créer une Stratégie
Syntaxe:
// Pour créer une stratégie dans l'instance Ultipa actuelle
create().policy(
"<name>",
<{}graph_privileges?>,
<[]system_privileges?>,
<[]policies?>,
<{}property_privileges?>
)
Où les structures de données sont:
// <{}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?>"],
...
],
}
}
Note 1: Lors de l'utilisation de l'astérisque *
pour remplacer le nom du GraphSet <graphSet>
, le "*"
signifie tous les GraphSets dans l'instance Ultipa actuelle. De même, le "*"
en remplacement de "<@schema>"
ou "<property>"
représente tous les schémas ou toutes les propriétés.
Note 2: Lorsque les éléments principaux du paramètre policy()
ne doivent pas être déclarés, leurs emplacements doivent toujours être tenus par des accolades vides si les éléments qui viennent ensuite doivent être déclarés.
Exemple: Créer la stratégie "sales" qui a le privilège UPDATE contre le GraphSet "default" et "client", le privilège système STAT, et READ pour toutes les propriétés
create().policy(
"sales",
{"default": ["UPDATE"], "client":["UPDATE"]},
["STAT"],
[],
{
"node": {"read":[["*","*","*"]]},
"edge": {"read":[["*","*","*"]]}
}
)
Modifier une Stratégie
Syntaxe:
// Pour modifier une certaine stratégie dans l'instance Ultipa actuelle
alter().policy("<name>").set({
graph_privileges: <{}graph_privileges?>,
system_privileges: <[]system_privileges?>,
policies: <[]policies?>,
property_privileges: <{}property_privileges?>
})
Où les structures de données <{}graph_privileges>
et <{}property_privileges>
sont les mêmes que celles dans la commande create().policy()
.
Exemple: Modifier la stratégie "sales", pour qu'elle ait uniquement UPDATE contre le graphset "default"
alter().policy("sales")
.set({graph_privileges: {"default": ["UPDATE"]}})
Exemple: Modifier la stratégie "management", afin qu'elle ait UPDATE et DELETE contre tous les graphsets, sous-stratégie "sales", et tous les privilèges de propriété liés.
alter().policy("management").set({
graph_privileges: {"*": ["UPDATE", "DELETE"]},
policies: ["sales"],
property_privileges: {
"node": {
"write": [["default","*","*"]]
},
"edge": {
"write": [["default","*","*"]]
}
}
})
Supprimer une Stratégie
Syntaxe:
// Pour supprimer une certaine stratégie de l'instance Ultipa actuelle
drop().policy("<name>")