keycloak-memoizeit

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>