Schlüsselcloak -Plugin: Gruppe der vorhandenen Berechtigung Gruppe hinzufügenJava

Java-Forum
Anonymous
 Schlüsselcloak -Plugin: Gruppe der vorhandenen Berechtigung Gruppe hinzufügen

Post by Anonymous »

In einem benutzerdefinierten Schlüsselcloak -Plugin versuche ich, feinkörnige Administratorberechtigungen zu erstellen und zu ändern. Nach einigen Graben stellte ich fest, dass dieser Code perfekt zum Erstellen einer Berechtigung funktioniert (die Richtlinie ist bereits erstellt) < /p>

Code: Select all

public void createPermission(PolicyStore policyStore, ResourceServer resourceServer, GroupModel group, String policyName) {
final Set scopes = Set.of("view-members", "manage-membership", "manage-members", "view", "manage");

Policy policy = requireNonNull(policyStore.findByName(resourceServer, policyName));

ScopePermissionRepresentation permissionRep = new ScopePermissionRepresentation();
permissionRep.setName("My new permission");
permissionRep.setResourceType("Groups");
permissionRep.addResource(group.getId()); // initial set of groups
permissionRep.setPolicies(Set.of(policy.getId()));
permissionRep.setScopes(scopes);
policyStore.create(resourceServer, permissionRep);
}
< /code>
Wie Sie sehen können, können Sie addResource mehrmals aufrufen und nur eine Gruppen -ID ist erforderlich. < /p>
Wenn ich versuche, eine vorhandene Berechtigung zu ändernpublic void addAnotherGroupToExistingPermission(String permissionName, GroupModel group, Set scopes, PolicyStore policyStore, StoreFactory storeFactory, ResourceServer resourceServer, String policyName) {
final Policy permission = requireNonNull(policyStore.findByName(resourceServer, permissionName));
final List availableScopes = storeFactory.getScopeStore().findByResourceServer(resourceServer);

permission.addResource(new ResourceWrapper(
null /* some id */, group.getName(),
availableScopes.stream().filter(s -> scopes.contains(s.getName())).collect(Collectors.toSet()),
resourceServer));
}
< /code>
Dies ist nur ein erster Ansatz. Offensichtlich ist die Verwendung von ResourceWrapper hier falsch und sollte wahrscheinlich ein von der Datenbank abgerufenes Objekt sein. Der aktuelle Code löst entweder eine DB -Einschränkungsausnahme aus (wenn ich die vorhandene Berechtigungs -ID verwende) oder eine, die besagt, dass die ID nicht festgelegt ist. Ich habe keine Ahnung, welcher Typ es sein sollte, und ich frage mich auch, dass die zugrunde liegende Schnittstelle Namen und Umfang enthält, aber kein Feld, das als GroupID 
verwendet werden kann, während ich mehr erwarte, einen einzelnen Satz von Gruppen -IDs zu finden. Angerufen, so etwas (fiktiver Code): < /p>

Code: Select all

public void addAnotherGroupFictiveExample(GroupModel group2, PolicyStore policyStore, ResourceServer resourceServer) {
ScopePermissionRepresentation permissionRep = policyStore.findByName(resourceServer, "My new permission");
// permissionRep.getResources().size() is now 1
permissionRep.addResource(group2.getId());
// permissionRep.getResources().size() is now 2
// maybe something like policyStore.update()
}
Ich kann diese Änderung in der Benutzeroberfläche durchführen. Es werden put/admin/realms/scicat/client/{clientID}/authz/ressourcen-server/tätig/scope/{promissionID} aufgerufen. Der JSON dieses Anrufs hat eine völlig andere Struktur (

Code: Select all

ScopePermissionRepresentation
) als das, was ich von PolicyStore.FindByName bekomme. Was ist der einfachste Weg, um diese Genehmigung aus der Java -Umgebung zu ändern ( ohne durch die Rest -API)?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post