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
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()
}
Code: Select all
ScopePermissionRepresentation