Dynamische räumliche Einschränkungen mit Benutzerattributen

In diesem Tutorial lernen Sie, eine räumliche Einschränkung basierend auf dem Benutzernamen zu definieren. Sie werden eine räumliche Einschränkung für den Continents (1) Layer erstellen, die Inhalte basierend auf Ländern filtert, deren Namen mit dem gleichen Buchstaben beginnen wie der Benutzername.

Dieses Tutorial wurde für ArcGIS Enterprise 11.5 im Dezember 2025 getestet.

Voraussetzungen

Dieses Tutorial basiert auf dem Dynamische Objekteinschränkungen mit Benutzerattributen 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.

Eine dynamische räumliche Einschränkung hinzufügen

security.manager NEXT bietet räumliche Filter, die auf Benutzerattributen wie dem Benutzernamen basieren. Der einfachste Weg ist, eine räumliche Einschrä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 räumliche Einschränkungs-Vorlage hinzufügen

Erstellen Sie zuerst eine räumliche Einschränkung ohne die Platzhalter zu ersetzen und referenzieren Sie sie zu einem neuen Fallback-Zugriffsrecht für Layer Continents (1).

  1. Fügen Sie eine neue Zeile am Anfang des restrictions Objekts hinzu.

  2. Geben Sie "country_username_filter": ein und wählen Sie Spatial restriction aus der Autocompletion-Liste.

  3. Erstellen Sie ein neues Fallback-Zugriffsrecht, indem Sie ein Komma und eine neue Zugriffsrecht-Vorlage am Ende des fallbackPolicies Arrays hinzufügen.

    {
        "fallbackPolicies": [{
            "layers": [
                "0"
            ],
            "restrictions": ["cities_only_names", "cities_username_filter"]
        },{
            "layers": [
                "1"
            ],
            "restrictions": ["country_username_filter"]
        }],
        "restrictions": {
            "country_username_filter": {
                "type": "spatial",
                "featuretypeurl": "https://myserver:6443/arcgis/rest/services/folder1/service1/FeatureServer/0",
                "featurequery": "state = 'California'"
            },
            "cities_username_filter":{
                "type": "feature",
                "query": "CITY_NAME LIKE UPPER(SUBSTRING('${user.username}', 1, 1)) || '%'"
            },
            "cities_only_names":{
                "type": "field",
                "allowedfields": [
                    "CITY_NAME"
                ]
            }
        }
    }
  4. Fügen Sie eine 1 zum leeren layers-String hinzu.

  5. Fügen Sie ein restrictions Array hinzu und referenzieren Sie die neue räumliche Einschränkung.

Jetzt haben Sie eine räumliche Einschränkung für ein Fallback-Zugriffsrecht erstellt. Ihr Zugriffsrecht sieht so aus:

{
    "fallbackPolicies": [{
        "layers": [
            "0"
        ],
        "restrictions": ["cities_only_names", "cities_username_filter"]
    },{
        "layers": [
            ""
        ]
    }],
    "restrictions": {
        "country_username_filter": {
            "type": "spatial",
            "featuretypeurl": "https://myserver:6443/arcgis/rest/services/folder1/service1/FeatureServer/0",
            "featurequery": "state = 'California'"
        },
        "cities_username_filter":{
            "type": "feature",
            "query": "CITY_NAME LIKE UPPER(SUBSTRING('${user.username}', 1, 1)) || '%'"
        },
        "cities_only_names":{
            "type": "field",
            "allowedfields": [
                "CITY_NAME"
            ]
        }
    }
}

Die Abfrage anpassen

Bisher wurden nur Platzhalter für die räumliche Einschränkung verwendet. Ersetzen Sie sie nun mit den gewünschten Werten.

  1. Ersetzen Sie den Wert der featuretypeurl Eigenschaft mit https://services.conterra.de/server/rest/services/security_demos/World_Countries/FeatureServer/0.

  2. Ersetzen Sie den Wert der featurequery Eigenschaft mit "NAME LIKE UPPER(SUBSTRING('${user.username}', 1, 1)) || '%'".

    Diese SQL-Abfrage ist ähnlich der SQL-Abfrage des vorherigen Tutorials.

  3. Definieren Sie, dass die imageoperation Eigenschaft dieser Einschränkung auf arcgis-clipping gesetzt ist.

  4. Klicken Sie Änderungen speichern und neu starten.

Das vollständige Zugriffsrecht sollte nun so aussehen:

{
    "fallbackPolicies": [{
        "layers": [
            "0"
        ],
        "restrictions": ["cities_only_names", "cities_username_filter"]
    },{
        "layers": [
            "1"
        ],
        "restrictions": ["country_username_filter"]
    }],
    "restrictions": {
        "country_username_filter": {
            "type": "spatial",
            "featuretypeurl": "https://services.conterra.de/server/rest/services/security_demos/World_Countries/FeatureServer/0",
            "featurequery": "NAME LIKE UPPER(SUBSTRING('${user.username}', 1, 1)) || '%'",
            "imageoperation": "arcgis-clipping"
        },
        "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 den Continents (1) Layer nach Ländern filtert, deren Namen mit dem gleichen Buchstaben beginnen wie der Name des Benutzers. Falls ein Benutzer mit dem Benutzernamen sasha diesen Layer des SampleWorldCities Service anfordert, ist die SQL-Abfrage der featurequery NAME LIKE UPPER(SUBSTRING('sasha', 1, 1)) || '%'. Diese Abfrage löst sich zu NAME LIKE 'S%' auf. Der Benutzer erhält jene Teile des Continents (1) Layers, die sich in Ländern befinden, die mit S beginnen, wie Saudi Arabia, Sweden oder South Korea. Diese Teile werden wie mit einem Plätzchenausstecher ausgeschnitten.

Konfiguration überprüfen

Um die vorherige Konfiguration zu überprüfen, greifen Sie mit allen vier Benutzern auf den SampleWorldCities Service zu.

  1. Öffnen Sie einen privaten Browser.

  2. Gehen Sie zum ArcGIS REST Services Directory und melden Sie sich als Benutzer Alex an.

  3. Navigieren Sie zu den Service-Metadaten des SampleWorldCities Service.

  4. Klicken Sie auf View in: ArcGIS JavaScript.

  5. Sie sehen alle Städte, deren Namen mit einem A beginnen.

  6. Sie sehen alle Teile des Continents Layers, die sich innerhalb von Ländern befinden, die mit A beginnen, wie Argentina, Australia oder Afghanistan.

    spatial userA

Wiederholen Sie die Schritte mit den anderen Benutzern, um zu überprüfen, dass der Continents Layer korrekt gefiltert wird.

  • Bob sieht den Continents-Layer in Ländern, die mit B beginnen, wie Bangladesh, Bolivia oder Botswana.

  • Charlie sieht den Continents-Layer in Ländern, die mit C beginnen, wie Canada, Cambodia oder China.

  • Dana sieht den Continents-Layer in Ländern, die mit D beginnen, wie Denmark oder Dominica.

Zusammenfassung

Sie haben gelernt, eine räumliche Einschränkung zu erstellen, die Zugriff auf Objekte basierend auf dem Benutzernamen gewährt. Sie haben eine Einschränkung erstellt, die den Continents Layer räumlich auf jene Länder filtert, deren Namen mit dem ersten Buchstaben des Benutzernamens übereinstimmen.

Sie haben nun alle Tutorials zum Erstellen von Zugriffsrechten abgeschlossen. Sie können mit dem Automatisierung & CI/CD Tutorial fortfahren, um mehr über Continuous Integration/Continuous Delivery (CI/CD) zu lernen.