Details
diff --git a/core/src/main/java/org/keycloak/representations/idm/authorization/PolicyRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/authorization/PolicyRepresentation.java
index dde3635..dd21901 100644
--- a/core/src/main/java/org/keycloak/representations/idm/authorization/PolicyRepresentation.java
+++ b/core/src/main/java/org/keycloak/representations/idm/authorization/PolicyRepresentation.java
@@ -16,6 +16,7 @@
*/
package org.keycloak.representations.idm.authorization;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -34,6 +35,7 @@ public class PolicyRepresentation {
private DecisionStrategy decisionStrategy = DecisionStrategy.UNANIMOUS;
private Map<String, String> config = new HashMap();
private List<PolicyRepresentation> dependentPolicies;
+ private List<PolicyRepresentation> associatedPolicies = new ArrayList<>();
public String getId() {
return this.id;
@@ -91,6 +93,14 @@ public class PolicyRepresentation {
this.description = description;
}
+ public List<PolicyRepresentation> getAssociatedPolicies() {
+ return associatedPolicies;
+ }
+
+ public void setAssociatedPolicies(List<PolicyRepresentation> associatedPolicies) {
+ this.associatedPolicies = associatedPolicies;
+ }
+
@Override
public boolean equals(final Object o) {
if (this == o) return true;
diff --git a/services/src/main/java/org/keycloak/authorization/admin/util/Models.java b/services/src/main/java/org/keycloak/authorization/admin/util/Models.java
index ca063cc..60dc51e 100644
--- a/services/src/main/java/org/keycloak/authorization/admin/util/Models.java
+++ b/services/src/main/java/org/keycloak/authorization/admin/util/Models.java
@@ -162,13 +162,22 @@ public final class Models {
return representation1;
}).collect(Collectors.toList()));
- List<String> obj = model.getAssociatedPolicies().stream().map(new Function<Policy, String>() {
- @Override
- public String apply(Policy policy) {
- return policy.getId();
- }
+ List<PolicyRepresentation> associatedPolicies = new ArrayList<>();
+
+ List<String> obj = model.getAssociatedPolicies().stream().map(policy -> {
+ PolicyRepresentation representation1 = new PolicyRepresentation();
+
+ representation1.setId(policy.getId());
+ representation1.setName(policy.getName());
+ representation1.setType(policy.getType());
+
+ associatedPolicies.add(representation1);
+
+ return policy.getId();
}).collect(Collectors.toList());
+ representation.setAssociatedPolicies(associatedPolicies);
+
try {
representation.getConfig().put("applyPolicies", JsonSerialization.writeValueAsString(obj));
} catch (IOException e) {
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/authz/permission/resource-server-permission-list.html b/themes/src/main/resources/theme/base/admin/resources/partials/authz/permission/resource-server-permission-list.html
index 35d471d..fcd9f67 100644
--- a/themes/src/main/resources/theme/base/admin/resources/partials/authz/permission/resource-server-permission-list.html
+++ b/themes/src/main/resources/theme/base/admin/resources/partials/authz/permission/resource-server-permission-list.html
@@ -3,7 +3,6 @@
<kc-tabs-resource-server></kc-tabs-resource-server>
<table class="table table-striped table-bordered">
- <caption class="hidden">Table of identity providers</caption>
<thead>
<tr>
<th class="kc-table-actions" colspan="5">
@@ -34,6 +33,7 @@
<th>Permission Name</th>
<th>Description</th>
<th>Type</th>
+ <th>Associated Policies</th>
</tr>
</thead>
<tbody>
@@ -41,6 +41,14 @@
<td><a href="#/realms/{{realm.realm}}/clients/{{client.id}}/authz/resource-server/permission/{{policy.type}}/{{policy.id}}">{{policy.name}}</a></td>
<td>{{policy.description}}</td>
<td>{{policy.type}}</td>
+ <td>
+ <span data-ng-show="!policy.associatedPolicies.length">No policies assigned.</span>
+ <span data-ng-show="policy.associatedPolicies.length > 0">
+ <span ng-repeat="policy in policy.associatedPolicies">
+ <a href="#/realms/{{realm.realm}}/clients/{{client.id}}/authz/resource-server/policy/{{policy.type}}/{{policy.id}}">{{policy.name}}</a>{{$last ? '' : ', '}}
+ </span>
+ </span>
+ </td>
</tr>
<tr data-ng-show="(policies | filter:search).length == 0">
<td class="text-muted" colspan="3" data-ng-show="search.name">No results</td>