Zugriffsrechte-Format
Überblick
Zugriffsrechte für einen Service werden im JSON-Format definiert.
Die JSON-Datei besteht aus dem Bereich "policies"
sowie den optionalen Bereichen "properties"
und "restrictions"
.
{
"policies": [],
"properties": {}, //Optional
"restrictions": {} //Optional
}
Die Reihenfolge, in der diese Eigenschaften definiert werden, ist unerheblich.
Die optionalen Eigenschaften können Sie entweder weglassen oder ihnen wie im Beispiel oben jeweils das leere Objekt {}
zuordnen.
Automatische Vervollständigung und Syntaxprüfung
Das hier beschriebene JSON-Format für Zugriffsrechte ist auch als JSON-Schema beschrieben. Mit Hilfe des Schemas können Sie sicherstellen, dass Ihre JSON-Datei den Vorgaben entspricht. Außerdem können Editoren wie Visual Studio Code auf Basis des Schemas Vorschläge, Beschreibungen sowie eine automatische Vervollständigung für Elemente bei der Eingabe anbieten. Fügen Sie der JSON-Datei die folgende
Eine Kopie des JSON-Schemas ist Teil der security.manager NEXT Auslieferung und verfügbar unter
|
Zugriffsrechte
Die Elemente des "policies"
-Arrays definieren die Regeln, die für den Zugriff auf einen Service gelten.
Ein einzelnes Zugriffsrecht ist eine Kombination aus Layern, Rollen und optionalen Einschränkungen.
Um Personen, die der Rolle role_division_42
zugeordnet sind, Zugriff auf die Layer mit den IDs 0
und 1
zu erteilen, definieren Sie folgende Regel:
{
"policies": [
{
"layers": ["0", "1"],
"roles": ["role_division_42"]
}
]
}
Layer
Die "layers"
-Eigenschaft eines "policies"
-Elements ist ein Array von Layer-IDs, so wie sie ein Kartenservice oder Feature-Service definiert.
Layer-IDs können explizit, als Intervall oder als "*"
, d.h. alle Layer, angegeben werden.
Das folgende Beispiel definiert zwei Zugriffsrechte. Das erste Zugriffsrecht wird auf die Layer 0 und 3 bis 5 angewendet, während das zweite Zugriffsrecht auf alle Layer des Service wirkt:
{
"policies": [
{
"layers": ["0", "3-5"],
"roles": ["enhancedSecurity_any"]
},
{
"layers": ["*"],
"roles": ["role_division_42"]
},
]
}
Rollen
Die "roles"
-Eigenschaft eines "policies"
-Elements ist ein Array von Rollen-IDs.
Eine Rollen-ID bezieht sich auf die Portal-Gruppe, die einer Person zugeordnet sind, die eine Serviceanfrage durchführt.
Bei einer Authentifizierung durch ArcGIS Enterprise werden die Rollen-IDs eines Zugriffsrechts mit den IDs der Portal-Gruppen der anfragenden Person verglichen.
Beispiel: Ein Person ist der Portal-Gruppe "Division 42" zugeordnet, deren Gruppen-ID im Portal 41477fa98f444444855e1e0b7b132b45
ist.
Folgende Regel erlaubt ihr den Zugriff auf den Layer 0
eines Service:
{
"policies": [
{
"layers": ["0"],
"roles": ["41477fa98f444444855e1e0b7b132b45"]
}
]
}
Außerdem können Sie die folgenden Rollen-IDs verwenden, um unabhängig von konkreten Rollenzuordnungen Zugriff zu erlauben:
-
enhancedSecurity_any
-
enhancedSecurity_authenticated
Ein Zugriffsrecht für die Rolle enhancedSecurity_any
gilt unabhängig davon, ob eine Person bei ArcGIS Enterprise angemeldet ist oder welche Rolle sie besitzt.
Allerdings muss der Service, für den diese Regel definiert definiert wird, in ArcGIS Enterprise öffentlich freigegeben sein, damit sie wirken kann.
Die Rolle enhancedSecurity_authenticated
können Sie nutzen, um nur Personen Zugriff zu erteilen, die bei ArcGIS Enterprise angemeldet sind.
Im folgenden Beispiel ist es allen Personen erlaubt, auf Layer 0
zuzugreifen.
Angemeldete Personen können sowohl auf Layer 0
als auch auf Layer 1
zugreifen:
{
"policies": [
{
"layers": ["0"],
"roles": ["enhancedSecurity_any"]
},
{
"layers": ["1"],
"roles": ["enhancedSecurity_authenticated"]
}
]
}
Einschränkungen
Mit Hilfe von Einschränkungen ("Restrictions") können Sie den Zugriff auf Layer genauer eingrenzen.
Das "restrictions"
-Array eines Zugriffsrechts enthält eine Liste von IDs, die Elemente des "restrictions"
-Objekts auf oberster Ebene der JSON-Datei referenzieren.
Das folgende Beispiel zeigt ein Zugriffsrecht, das die Einschränkung "california"
referenziert, die weiter unten in der Datei definiert wird.
{
"policies": [
{
"layers": ["0"],
"roles": ["${guests}"],
"restrictions": ["california"]
}
],
"restrictions": {
"california": {
"type": "spatial",
"featuretypeurl": "https://gis.example.com:6443/arcgis/rest/services/USA/FeatureServer/0",
"featurequery": "state = 'California'"
}
}
}
Im Abschnitt Definition von Einschränkungen erfahren Sie mehr über die Konfiguration von Einschränkungen.
Eigenschaften
Das "properties"
-Array besteht aus Schlüssel-Wert-Paaren, mit denen Sie Eigenschaften definieren können, die an anderer Stelle in dieser Datei verwendet werden können.
Die Werte von Eigenschaften müssen Strings sein.
Die Schlüssel müssen mit einem Buchstaben beginnen und dürfen nur aus den Zeichen a-z, A-Z, 0-9 sowie '_' (Unterstrich) und '-' (Minus) bestehen.
Sie können die Werte in anderen Elementen verwenden, indem Sie diese mit ${property_name}
referenzieren.
Auf diese Weise können Sie Eigenschaften beschreibende Namen geben.
Im folgenden Beispiel wird die Rollen-ID 41477fa98f444444855e1e0b7b132b45
der Eigenschaft "guests"
zugeordnet.
Sie kann daher auf folgende Weise in einem Zugriffsrecht referenziert werden:
{
"policies": [
{
"layers": ["0"],
"roles": ["${guests}"]
}
],
"properties": {
"guests": "41477fa98f444444855e1e0b7b132b45"
}
}
Definition von Einschränkungen
Eine Regel kann den Zugriff auf Layer begrenzen, indem Sie ihr Einschränkungen ("Restrictions") zuordnen.
Das folgende Beispiel zeigt ein Zugriffsrecht, das die Einschränkung "california"
referenziert, die im "restrictions"
-Element auf oberster Ebene definiert ist.
{
"policies": [
{
"layers": ["0"],
"roles": ["${guests}"],
"restrictions": ["california"]
}
],
"restrictions": {
"california": {
"type": "spatial",
"featuretypeurl": "https://gis.example.com:6443/arcgis/rest/services/USA/FeatureServer/0",
"featurequery": "state = 'California'"
}
}
}
Der Name einer Einschränkung (wie zum Beispiel california
in obigem Beispiel) darf nur aus den Zeichen a-z, A-Z, 0-9 sowie '_' (Unterstrich) und '-' (Minus) bestehen.
Er muss mit einem Buchstaben beginnen.
Sie können folgende Arten von Einschränkungen verwenden:
- Räumlich
-
Zugriff auf ein räumliches Gebiet einschränken
- Feld
-
Zugriff auf Felder eines Layers einschränken
- Objekt
-
Zugriff auf Objekte eines Layers einschränken
- Editierung
-
Editieren von Geometrien und Attributen verbieten
Einschränkungen, die in einem Zugriffsrecht referenziert werden, gelten immer für alle in diesem Zugriffsrecht angegebenen Layer. Wenn Sie für unterschiedliche Layer unterschiedliche Einschränkungen definieren möchten, müssen dazu separate Zugriffsrechte angelegt werden. |
Räumliche Einschränkungen
Mittels räumlicher Einschränkungen können Sie festlegen, für welchen geographischen Bereich eines Layers Daten zugegriffen werden können. Räumliche Einschränkungen legen fest, welche Bereiche in einem Kartenbild sichtbar sind. Im Falle der Abfrage von Objekten (Features) bestimmen Sie mit räumlichen Einschränkungen, dass nur solche Features zurückgegeben werden, die im erlaubten Bereich liegen.
Den erlaubten Bereich definieren Sie als Referenz auf Geometrien, die von einem ArcGIS Feature-Service bereitgestellt werden. Diese Referenz besteht aus folgenden Informationen:
type
-
Typ der Einschränkung, muss den Wert
"spatial"
besitzen. featuretypeurl
-
URL, die einen Feature-Service Layer referenziert.
Neben einer absoluten URL können auch relative URLs der Form/<folder>/<service>/FeatureServer/0
verwendet werden.
Die Verwendung relativer URLs erlaubt auch die Nutzung nicht-öffentlicher Feature-Services für räumliche Einschränkungen. featurequery
-
Definition Expression (oder "WHERE clause"), mit der die Features abgefragt werden, die den erlaubten Bereich beschreiben.
Sie können als Teil der Query Nutzerattribute verwenden, beispielsweise in der Form
oderOWNER = '${user.username}'
.DEPARTMENT IN ${user.roles}
Die Regel im folgenden Beispiel erlaubt Zugriff auf jene Objekte von Layer 1
, die innerhalb oder auf dem Rand von Features des Layers https://gis.example.com:6443/arcgis/rest/services/RestricionAreas/FeatureServer/0
liegen, deren Eigenschaft area_name
gleich 51
ist.
{
"policies": [
{
"layers": ["1"],
"roles": ["${guests}"],
"restrictions": ["area51"]
}
],
"restrictions": {
"area51": {
"type": "spatial",
"featuretypeurl": "https://gis.example.com:6443/arcgis/rest/services/RestricionAreas/FeatureServer/0",
"featurequery": "area_name = '51'"
}
}
}
Räumliche Einschränkungen werden grundsätzlich auf alle Layer des Kartenservice angewendet. Bei Feature-Services wird die räumliche Einschränkung auf die jeweils konfigurierten Layer angewendet.
Feldeinschränkungen
Mit Feldeinschränkungen können Sie festlegen, dass bestimmte Felder eines Layers oder einer Tabelle nicht zugreifbar, d.h. weder sichtbar noch editierbar, sein sollen. Die Felder, die verborgen werden sollen, müssen als Liste von Feldnamen angegeben werden.
Für die Definition einer Feldeinschränkung im "restrictions"
-Element auf oberster Ebene des Dokuments müssen Sie folgende Eigenschaften angeben:
type
-
Type der Einschränkung, muss den Wert
"field"
besitzen. hiddenfields
-
Array von Strings, der die Feldnamen eines Layers oder einer Tabelle aufzählt, auf die nicht zugegriffen werden darf.
Einschränkung
Replikate werdeb bei vorhandenen Feldeinschränkungen nicht unterstützt. |
Folgendes Zugriffsrecht legt eine Einschränkung für Felder des Layers 42
fest.
Personen, die nicht angemeldet sind, dürfen nicht auf die Felder DIVISION_SIZE
und DIVISION_REVENUE
zugreifen.
{
"restrictions": {
"secret_division_data": {
"type": "field",
"hiddenfields": ["DIVISION_SIZE", "DIVISION_REVENUE"]
}
},
"policies": [
{
"layers": ["42"],
"roles": ["enhancedSecurity_any"],
"restrictions": ["secret_division_data"]
}
]
}
Objekteinschränkungen
Sollen bestimmte Objekte ("Features") eines Layers oder einer Tabelle für Mitglieder bestimmter Rollen nicht sichtbar sein, können Sie Objekteinschränkungen verwenden. Dazu geben Sie einen Abfrageausdruck ("Definition Query") an, mit dem Sie festlegen, auf welche Objekte eine Person zugreifen kann.
Für die Definition einer Objekteinschränkung im "restrictions"
-Element auf oberster Ebene des Dokuments müssen Sie folgende Eigenschaften angeben:
type
-
Typ der Einschränkung, muss den Wert
"feature"
besitzen. query
-
Abfrageausdruck, in der vom ArcGIS Server unterstützten SQL-Syntax, analog zur Einschränkung einzelner Layer z.B. in ArcMap oder ArcGIS Pro.
Sie können als Teil der Query Nutzerattribute verwenden, beispielsweise in der Form
oderOWNER = '${user.username}'
.DEPARTMENT IN ${user.roles}
Folgendes Zugriffsrecht legt eine Einschränkung für Objekte des Layers 42
fest.
Alle angemeldeten Personen dürfen nur auf Objekte zugreifen, deren Feld DIVISION_NAME
den Wert North
besitzt.
{
"restrictions": {
"northern_division": {
"type": "feature",
"query": "DIVISION_NAME = 'North'"
}
},
"policies": [
{
"layers": ["42"],
"roles": ["enhancedSecurity_authenticated"],
"restrictions": ["northern_division"]
}
]
}
Editier-Einschränkungen
Standardmäßig kann jeder Benutzer mit Zugriff auf einen Feature-Service sowohl Geometrie- als auch Attribut-Daten bearbeiten. Dies kann für bestimmte Ebenen und Gruppen verweigert werden.
type
-
Typ der Einschränkung, muss den Wert
"readonly"
besitzen.
Folgendes Zugriffsrecht verbietet das Editieren für alle Layer durch Benutzer der Gruppe enhancedSecurity_authenticated
.
{
"restrictions": {
"editing_denied": {
"type": "readonly"
}
},
"policies": [
{
"layers": ["*"],
"roles": ["enhancedSecurity_authenticated"],
"restrictions": ["editing_denied"]
}
]
}
Ist jemand mehr als einer Gruppe zugeordnet und für mehrere dieser Gruppen existieren Zugriffsrechte für einen bestimmten Layer, so wird der Zugriff unter Berücksichtigung der Gesamtheit aller in dieser Zugriffsrechte definierten Einschränkungen gewährt. Das bedeutet:
|
Liste der Nutzerattribute
Folgende Ausdrücke können verwendet werden, um Attribute des anfragenden Nutzers in einem Abfrageausdruck einzusetzen:
Ausdruck | Bedeutung |
---|---|
|
<FIELDNAME> entspricht dem Nutzernamen |
|
<FIELDNAME> entspricht einer der Rollen des Nutzers |