Dynamische Objekteinschränkungen mit Benutzerattributen
In diesem Tutorial lernen Sie, eine Objekteinschränkung basierend auf dem Benutzernamen zu definieren. Benutzer sollen nur Städte sehen, die mit dem gleichen Buchstaben beginnen wie der Name des Benutzers.
Dieses Tutorial wurde für ArcGIS Enterprise 11.5 im Dezember 2025 getestet.
Voraussetzungen
Dieses Tutorial basiert auf dem Fallback-Zugriffsrecht Tutorial. Die Voraussetzungen sind für beide dieselben. Sie können dieses Tutorial separat durchführen, bedenken Sie aber, dass Ihre Zugriffsrecht-Datei anders aussehen könnte.
-
security.manager NEXT ist installiert.
-
Sie können fünf Benutzerkonten verwenden:
-
Ein Administrator-Benutzerkonto zur Verwaltung von security.manager und Portal.
-
4 Nicht-Administrator-Benutzerkonten zum Testen des Zugriffs:
-
Alex ist in groupX
-
Bob ist in groupY
-
Charlie ist in sowohl groupX als auch groupY
-
Dana ist weder in groupX noch in groupY
-
-
-
Sie können den Service SampleWorldCities für dieses Tutorial verwenden. So können Sie den Zugriff auf den Service einschränken.
Aufräumen
Das Zugriffsrecht ist im Laufe der Tutorials ziemlich lang geworden. Für die nächsten Tutorials reicht es aus, nur die fallbackPolicies zu verwenden. Löschen Sie daher alle Segmente außer den fallbackPolicies und den dort verwendeten Einschränkungen.
{
"fallbackPolicies": [{
"layers": [
"0"
],
"restrictions": ["cities_only_names"]
}],
"restrictions": {
"cities_only_names":{
"type": "field",
"allowedfields": [
"CITY_NAME"
]
}
}
}
Eine dynamische Objekteinschränkung hinzufügen
security.manager NEXT bietet Objekt-Abfragen, die auf Benutzerattributen wie dem Benutzernamen basieren. Der einfachste Weg ist, eine Objekteinschränkungs-Vorlage hinzuzufügen und dann die Abfrage zu modifizieren.
Sie können Vorlagen hinzufügen, indem Sie Ctrl+Space drücken. Diese Funktion zeigt verfügbare Beispiele, Beschreibungen und Code-Schnipsel an.
Eine Objekteinschränkung hinzufügen
Erstellen Sie zuerst eine Objekteinschränkung ohne den Abfrage-Platzhalter zu ersetzen und referenzieren Sie sie zum bestehenden Fallback-Zugriffsrecht.
-
Fügen Sie eine neue Zeile am Anfang des
restrictionsObjekts hinzu. -
Geben Sie
"cities_username_filter":ein und wählen Sie Feature restriction aus der Autocompletion-Liste. -
Nach der
cities_only_namesEinschränkungs-Referenz des Fallback-Zugriffsrechts fügen Sie ein Komma und eine Referenz zurcities_username_filterEinschränkung hinzu.
Jetzt haben Sie eine Objekteinschränkung für das Fallback-Zugriffsrecht erstellt. Ihr Zugriffsrecht sieht so aus:
{
"fallbackPolicies": [{
"layers": [
"0"
],
"restrictions": ["cities_only_names", "cities_username_filter"]
}],
"restrictions": {
"cities_username_filter":{
"type": "feature",
"query": ""
},
"cities_only_names":{
"type": "field",
"allowedfields": [
"CITY_NAME"
]
}
}
}
Die Abfrage anpassen
Um ein gültiges Zugriffsrecht zu erhalten, müssen Sie eine Abfrage für die Objekteinschränkung definieren.
-
Um den Städtenamen mit dem Benutzernamen zu vergleichen, ersetzen Sie den leeren String der query-Eigenschaft mit
"CITY_NAME LIKE ${user.username}". -
Um nur den ersten Buchstaben des Benutzernamens zu vergleichen, fügen Sie die
SUBSTRINGFunktion hinzu:CITY_NAME LIKE SUBSTRING('${user.username}', 1, 1)Aktuell muss der Städtename dem ersten Buchstaben des Benutzernamens entsprechen.
-
Um zu definieren, dass der Städtename mit dem ersten Buchstaben beginnen soll, fügen Sie
|| '%'am Ende der Abfrage hinzu.Das
||verknüpft Strings in der SQL-Abfrage. Sie verwenden es, um das%Wildcard-Zeichen mit dem ersten Buchstaben des Benutzernamens zu verknüpfen. Jetzt muss der Städtename mit dem ersten Buchstaben des Benutzernamens beginnen, anstatt ihm vollständig zu entsprechen. -
Die Städtenamen beginnen mit Großbuchstaben. Fügen Sie also die
UPPERFunktion hinzu, um sicherzustellen, dass der erste Buchstabe des Benutzernamens ebenfalls großgeschrieben ist. Die SQL-Abfrage sieht so aus:CITY_NAME LIKE UPPER(SUBSTRING('${user.username}', 1, 1)) || '%' -
Klicken Sie Änderungen speichern und neu starten.
Das vollständige Zugriffsrecht mit dynamischen Einschränkungen sollte nun so aussehen:
{
"fallbackPolicies": [
{
"layers": [
"0"
],
"restrictions": ["cities_only_names", "cities_username_filter"]
}
],
"restrictions": {
"cities_username_filter": {
"type": "feature",
"query": "CITY_NAME LIKE UPPER(SUBSTRING('${user.username}', 1, 1)) || '%'"
},
"cities_only_names": {
"type": "field",
"allowedfields": [
"CITY_NAME"
]
}
}
}
Sie haben eine Abfrage definiert, die die Städtenamen basierend auf dem Namen des Benutzers filtert.
Falls ein Benutzer mit dem Benutzernamen sasha den SampleWorldCities Service anfordert, ist die SQL-Abfrage CITY_NAME LIKE UPPER(SUBSTRING('sasha', 1, 1)) || '%'.
Diese Abfrage löst sich zu CITY_NAME LIKE 'S%' auf.
Der Benutzer erhält die Städte, die mit S beginnen, wie San Diego, Seattle oder Stockholm.
Konfiguration überprüfen
Um die vorherige Konfiguration zu überprüfen, greifen Sie mit allen vier Benutzern auf den SampleWorldCities Service zu.
-
Öffnen Sie einen privaten Browser.
-
Gehen Sie zum ArcGIS REST Services Directory und melden Sie sich als Benutzer Alex an.
-
Navigieren Sie zu den Service-Metadaten des SampleWorldCities Service.
-
Klicken Sie auf View in: ArcGIS JavaScript.
-
Sie sehen alle Städte, deren Namen mit einem A beginnen, wie Austin, Amsterdam oder Auckland.
Wiederholen Sie die Schritte mit den anderen Benutzern, um zu überprüfen, dass die Städte korrekt gefiltert werden.
-
Bob sieht Städte, die mit B beginnen, wie Brasilia, Barcelona oder Beirut.
-
Charlie sieht Städte, die mit C beginnen, wie Calgary, Cairo oder Cologne.
-
Dana sieht Städte, die mit D beginnen, wie Denver, Dallas oder Dhaka.
Zusammenfassung
Sie haben gelernt, eine Objekteinschränkung zu erstellen, die Zugriff auf Objekte basierend auf dem Benutzernamen gewährt. Sie haben eine Einschränkung erstellt, die die Städte auf jene filtert, deren Namen mit dem ersten Buchstaben des Benutzernamens übereinstimmen.
Im Tutorial Dynamische räumliche Einschränkungen mit Benutzerattributen lernen Sie, einen dynamischen Filter in einer räumlichen Einschränkung anstelle einer Objekteinschränkung zu verwenden.