IDM Beispiel mit Rollen Parameter

Dies ist eine Demo, die zeigt, wie man mit Beziehungseigenschaften (auch bekannt als Rollenparameter) in ForgeRock IDM >=6.5 arbeitet. In dieser Demo zeige ich auch eine Lösung zur Abfrage dieser Parameter. In der Demo erstelle ich eine Rolle „Fahrer“ und die Rollenparameter sind alle Fahrzeuge, die zum „Fahrer“ „gehören“. In einigen Anwendungsfällen möchte ich nicht nur „wer ist ein Fahrer“ oder „Ist der Benutzer ein Fahrer“ abfragen, sondern auch „Wer ist der Fahrer dieses Autos“.

Ich danke meinem lieben College Tim Vogt, der mir Input gegeben hat.

Sie können den Code herunterladen und hier testen!

[bogo]

Zweck der Demo

Der Zweck dieser Demo ist es, zu zeigen, wie die Beziehungen mit ForgeRock IDM 6.5x funktionieren. Sie können „Rollenparameter“ definieren, um eine individuelle Information zu präsentieren, die die Rolle mit einem Benutzer verbindet. Diese Parameter können den verwalteten Objekten im IDM hinzugefügt werden. Die Beziehung stellt eine Verknüpfung von und zu einer Rolle zu einem Benutzerobjekt dar. In diesen Links können Sie Parameter zuweisen (wir nennen sie Beziehungseigenschaften). Diese „Parameter“ sind spezifisch für diesen „Link“. IDM nutzt dies durch DEFAULT in dem Rollenobjekt, das einem Benutzerobjekt zugeordnet werden kann. In diesem Fall kann eine Zeitbeschränkung angelegt werden, damit eine Rollenzuordnung für diesen Benutzer nur temporär erfolgen kann. Die Rollen können auch zur Bereitstellung für Zielsysteme wie AD, LDAP und viele andere Zielsysteme verwendet werden.

Sie können dieses Objektmodell für jedes verwaltete Objekt in IDM nutzen. Der Vorteil ist, dass zu dieser Verknüpfung zwischen diesen Objekten ein individueller „Verknüpfungsparameter“ angelegt wird.

Ein zweiter Anwendungsfall ist die Abfrage dieses Parameters. In meinem Beispiel erstelle ich eine Rolle „Fahrer“ und weise diese einem Benutzer mit dem Parameter des Autokennzeichens „M-HN 1234“ zu. Nun möchte ich die Frage stellen: „Welche Benutzer haben den Rollentreiber für das Auto M-HN 1234“. Der REST Aufruf kann so definiert werden, dass auch die Antworten der Benutzer-IDs mit angezeigt werden.

Wenn Sie möchten, dass eine Abfrage beispielsweise alle Benutzerobjekte als Antwort enthält, empfehle ich einen benutzerdefinierten Endpunkt, der den Fahrzeugparameter abfragt und als Ergebnis des benutzerdefinierten Endpunkts ein „vollständiges“ Lesen der Benutzerobjekte durchführt. Natürlich können Sie auch einen benutzerdefinierten Endpunkt erstellen, um die Antwort nach Bedarf zu erweitern.

Überblick Rollen im IDM

Im Kapitel “Managing Roles” finden Sie alle Details zum Rollen Objekt in IDM.

IDM starten

Um IDM z.B. lokal zu starten:

./startup.sh -p pathto/object-properties -w pathto/object-properties

config/prep des IDM

  • Abgleich der csv-Demo-Benutzer (Sie haben zwei Benutzer zum Testen: bjensen und acarter)
either do it from the admin console
http://localhost:8080/admin/#properties/systemCsvfileAccounts_managedUser/

or use a restcall:

curl --request POST \
  --url 'http://localhost:8080/openidm/recon?_action=recon&mapping=systemCsvfileAccounts_managedUser&waitForCompletion=true' \
  --header 'X-OpenIDM-Password: openidm-admin' \
  --header 'X-OpenIDM-Username: openidm-admin' \

Response:
{
    "_id": "9a7c0543-235b-4eb2-b289-e4a3b5233ce2-67370",
    "state": "SUCCESS"
}
  • create a role “driver”:
curl --request POST \
  --url 'https://localhost:8443/openidm/managed/role/?action=create' \
  --header 'X-OpenIDM-Password: openidm-admin' \
  --header 'X-OpenIDM-Username: openidm-admin' \
  --data '{\n	"_id": "driver",\n  "name": "Driver",\n  "description": "Example role for Drivers"\n}'

Response:
{
    "_id": "driver",
    "_rev": "0000000097815538",
    "name": "Driver",
    "description": "Example role for Drivers"
}

TIPP: Ich verwende hier die _id, um die Rolle direkt mit /managed/role/driver anstelle einer UUID aufzurufen!
role driver

use case: Zuweisung der Rolle „Fahrer“ an einen Benutzer mit der Eigenschaft Rolle

Ich weise die Rolle einem Benutzer mit dem Parameter „cars“ dem Benutzer „bjensen“ zu:

curl --request PATCH \
  --url https://localhost:8443/openidm/managed/user/bjensen \
  --header 'Content-Type: application/json' \
  --header 'X-OpenIDM-Password: openidm-admin' \
  --header 'X-OpenIDM-Username: openidm-admin' \
  --data '[\n   {\n     "operation" : "add",\n     "field" : "/roles/-",\n     "value" : {\n     	"_ref": "managed/role/driver",\n        "_refProperties": { "cars": "M-HN 1234" }\n     }\n   }\n ]'

Response:
{
    "_id": "bjensen",
    "_rev": "0000000070dd1b5e",
    "mail": "bjensen@example.com",
    "givenName": "Barbara",
    "sn": "Jensen",
    "description": "Created By CSV",
    "userName": "bjensen",
    "telephoneNumber": "1234567",
    "accountStatus": "active",
    "effectiveRoles": [
        {
            "_ref": "managed/role/driver"
        }
    ],
    "effectiveAssignments": []
}

Der Benutzer sollte nun die Rolle „Fahrer“ enthalten:

von der Relationship sieht es so aus:

Beispiel Admin Dashboard für relationale Benutzer->Rolle

Beispiel Admin Dashboard für Beziehungsrolle->Benutzer

Beispiel curl

Aufruf der Rolle direkt

curl --request GET \
  --url 'http://localhost:8080/openidm/managed/user/bjensen?_fields=roles'
  --header 'X-OpenIDM-Password: openidm-admin' \
  --header 'X-OpenIDM-Username: openidm-admin' \


sample respond:
{
    "_id": "bjensen",
    "_rev": "00000000a0aa11bb",
    "roles": [
        {
            "_ref": "managed/role/driver",
            "_refResourceCollection": "managed/role",
            "_refResourceId": "driver",
            "_refProperties": {
                "cars": "M-HN 1234",
                "_id": "1fc4f216-eedb-4c61-bc6e-d505e87d3e11",
                "_rev": "00000000d8639b19"
            }
        }
    ]
}

Aufruf des Benutzers:


curl --request GET \
  --url 'http://localhost:8080/openidm/managed/user/bjensen?_fields=roles' \
  --header 'X-OpenIDM-Password: openidm-admin' \
  --header 'X-OpenIDM-Username: openidm-admin' \

respond:

{
    "_id": "bjensen",
    "_rev": "00000000a0aa11bb",
    "roles": [
        {
            "_ref": "managed/role/driver",
            "_refResourceCollection": "managed/role",
            "_refResourceId": "driver",
            "_refProperties": {
                "cars": "M-HN 1234",
                "_id": "1fc4f216-eedb-4c61-bc6e-d505e87d3e11",
                "_rev": "00000000d8639b19"
            }
        }
    ]
}

use case: Abfrage der Beziehungseigenschaften zu einer Rolleneigenschaft „car“.

the query in a more reader friendly way:
openidm/repo/relationships/?_queryFilter=firstResourceCollection eq 'managed/role' and properties/cars eq "M-HN 1234"


curl --request GET \
  --url 'http://localhost:8080/openidm/repo/relationships/?_queryFilter=firstResourceCollection%20eq%20%27managed/role%27%20and%20properties/cars%20eq%20%22M-HN%201234%22' \
  --header 'X-OpenIDM-Password: openidm-admin' \
  --header 'X-OpenIDM-Username: openidm-admin' \

response:
{
    "result": [
        {
            "_id": "1fc4f216-eedb-4c61-bc6e-d505e87d3e11",
            "_rev": "00000000d8639b19",
            "firstResourceCollection": "managed/role",
            "firstResourceId": "driver",
            "firstPropertyName": "members",
            "secondResourceCollection": "managed/user",
            "secondResourceId": "bjensen",
            "secondPropertyName": "roles",
            "properties": {
                "cars": "M-HN 1234"
            }
        }
    ],
    "resultCount": 1,
    "pagedResultsCookie": null,
    "totalPagedResultsPolicy": "NONE",
    "totalPagedResults": -1,
    "remainingPagedResults": -1
}

postman collections

coming soon.

Copyright

============= Copyright 2014-2017 ForgeRock AS. All Rights Reserved

Use of this code requires a commercial software license with ForgeRock AS. or with one of its affiliates. All use shall be exclusively subject to such license between the licensee and ForgeRock AS.

This demo is based on the sample: One-Way Sync With CSV Sample

This sample demonstrates reconciliation between a CSV file and the managed/user repository. For documentation relating to this sample, see https://backstage.forgerock.com/docs/idm/6.5/samples-guide#chap-sync-with-csv

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.