keycloak
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 全メンバ一覧
org.keycloak.authorization.admin.PolicyEvaluationService.EvaluationDecisionCollector クラス
org.keycloak.authorization.admin.PolicyEvaluationService.EvaluationDecisionCollector の継承関係図
Inheritance graph
org.keycloak.authorization.admin.PolicyEvaluationService.EvaluationDecisionCollector 連携図
Collaboration graph

公開メンバ関数

 EvaluationDecisionCollector (AuthorizationProvider authorizationProvider, ResourceServer resourceServer, AuthorizationRequest request)
 
Collection< ResultgetResults ()
 
void onComplete (Result result)
 
void onComplete ()
 
void onComplete (ResourcePermission permission)
 
Collection< Permissionresults ()
 
void onError (Throwable cause)
 
void onDecision (DefaultEvaluation evaluation)
 
void onDecision (D evaluation)
 

限定公開メンバ関数

boolean isGranted (Result.PolicyResult policyResult)
 
void grantPermission (AuthorizationProvider authorizationProvider, List< Permission > permissions, ResourcePermission permission, Collection< Scope > grantedScopes, ResourceServer resourceServer, AuthorizationRequest request, Result result)
 
void onComplete (Collection< Result > permissions)
 
void onGrant (Permission permission)
 

限定公開変数類

final Map< ResourcePermission, Resultresults = new LinkedHashMap<>()
 

詳解

構築子と解体子

◆ EvaluationDecisionCollector()

org.keycloak.authorization.admin.PolicyEvaluationService.EvaluationDecisionCollector.EvaluationDecisionCollector ( AuthorizationProvider  authorizationProvider,
ResourceServer  resourceServer,
AuthorizationRequest  request 
)
inline
273  {
275  }
final ResourceServer resourceServer
Definition: DecisionPermissionCollector.java:45
final AuthorizationProvider authorizationProvider
Definition: DecisionPermissionCollector.java:44
final AuthorizationRequest request
Definition: DecisionPermissionCollector.java:46

関数詳解

◆ getResults()

Collection<Result> org.keycloak.authorization.admin.PolicyEvaluationService.EvaluationDecisionCollector.getResults ( )
inline
293  {
294  return results.values();
295  }
Collection< Permission > results()
Definition: DecisionPermissionCollector.java:130

◆ grantPermission()

void org.keycloak.authorization.admin.PolicyEvaluationService.EvaluationDecisionCollector.grantPermission ( AuthorizationProvider  authorizationProvider,
List< Permission permissions,
ResourcePermission  permission,
Collection< Scope grantedScopes,
ResourceServer  resourceServer,
AuthorizationRequest  request,
Result  result 
)
inlineprotected
287  {
288  result.setStatus(Effect.PERMIT);
289  result.getPermission().getScopes().retainAll(grantedScopes);
290  super.grantPermission(authorizationProvider, permissions, permission, grantedScopes, resourceServer, request, result);
291  }
final ResourceServer resourceServer
Definition: DecisionPermissionCollector.java:45
final List< Permission > permissions
Definition: DecisionPermissionCollector.java:47
final AuthorizationProvider authorizationProvider
Definition: DecisionPermissionCollector.java:44
final AuthorizationRequest request
Definition: DecisionPermissionCollector.java:46

◆ isGranted()

boolean org.keycloak.authorization.admin.PolicyEvaluationService.EvaluationDecisionCollector.isGranted ( Result.PolicyResult  policyResult)
inlineprotected
278  {
279  if (super.isGranted(policyResult)) {
280  policyResult.setEffect(Effect.PERMIT);
281  return true;
282  }
283  return false;
284  }

◆ onComplete() [1/4]

void org.keycloak.authorization.policy.evaluation.DecisionPermissionCollector.onComplete ( Result  result)
inlineinherited
56  {
57  ResourcePermission permission = result.getPermission();
58  Resource resource = permission.getResource();
59  List<Scope> requestedScopes = permission.getScopes();
60 
61  if (Effect.PERMIT.equals(result.getEffect())) {
62  grantPermission(authorizationProvider, permissions, permission, resource != null ? resource.getScopes() : requestedScopes, resourceServer, request, result);
63  } else {
64  Set<Scope> grantedScopes = new HashSet<>();
65  Set<Scope> deniedScopes = new HashSet<>();
66  List<Result.PolicyResult> userManagedPermissions = new ArrayList<>();
67  boolean resourceGranted = false;
68  boolean anyDeny = false;
69 
70  for (Result.PolicyResult policyResult : result.getResults()) {
71  Policy policy = policyResult.getPolicy();
72  Set<Scope> policyScopes = policy.getScopes();
73 
74  if (isGranted(policyResult)) {
75  if (isScopePermission(policy)) {
76  for (Scope scope : requestedScopes) {
77  if (policyScopes.contains(scope)) {
78  grantedScopes.add(scope);
79  }
80  }
81  } else if (isResourcePermission(policy)) {
82  grantedScopes.addAll(requestedScopes);
83  } else if (resource != null && resource.isOwnerManagedAccess() && "uma".equals(policy.getType())) {
84  userManagedPermissions.add(policyResult);
85  }
86  if (!resourceGranted) {
87  resourceGranted = policy.getResources().contains(resource);
88  }
89  } else {
90  if (isResourcePermission(policy)) {
91  if (!resourceGranted) {
92  deniedScopes.addAll(requestedScopes);
93  }
94  } else {
95  deniedScopes.addAll(policyScopes);
96  }
97  if (!anyDeny) {
98  anyDeny = true;
99  }
100  }
101  }
102 
103  // remove any scope denied from the list of granted scopes
104  grantedScopes.removeAll(deniedScopes);
105 
106  if (userManagedPermissions.isEmpty()) {
107  if (!resourceGranted && (grantedScopes.isEmpty() && !requestedScopes.isEmpty())) {
108  return;
109  }
110  } else {
111  for (Result.PolicyResult userManagedPermission : userManagedPermissions) {
112  grantedScopes.addAll(userManagedPermission.getPolicy().getScopes());
113  }
114 
115  if (grantedScopes.isEmpty() && !resource.getScopes().isEmpty()) {
116  return;
117  }
118 
119  anyDeny = false;
120  }
121 
122  if (anyDeny && grantedScopes.isEmpty()) {
123  return;
124  }
125 
126  grantPermission(authorizationProvider, permissions, permission, grantedScopes, resourceServer, request, result);
127  }
128  }
static boolean isScopePermission(Policy policy)
Definition: DecisionPermissionCollector.java:185
boolean isGranted(Result.PolicyResult policyResult)
Definition: AbstractDecisionCollector.java:98
final ResourceServer resourceServer
Definition: DecisionPermissionCollector.java:45
final List< Permission > permissions
Definition: DecisionPermissionCollector.java:47
final AuthorizationProvider authorizationProvider
Definition: DecisionPermissionCollector.java:44
final AuthorizationRequest request
Definition: DecisionPermissionCollector.java:46
static boolean isResourcePermission(Policy policy)
Definition: DecisionPermissionCollector.java:181
void grantPermission(AuthorizationProvider authorizationProvider, List< Permission > permissions, ResourcePermission permission, Collection< Scope > grantedScopes, ResourceServer resourceServer, AuthorizationRequest request, Result result)
Definition: DecisionPermissionCollector.java:139

◆ onComplete() [2/4]

void org.keycloak.authorization.policy.evaluation.AbstractDecisionCollector.onComplete ( )
inlineinherited

org.keycloak.authorization.Decision< D extends Evaluation >を実装しています。

77  {
78  onComplete(results.values());
79  }
final Map< ResourcePermission, Result > results
Definition: AbstractDecisionCollector.java:35
void onComplete()
Definition: AbstractDecisionCollector.java:77

◆ onComplete() [3/4]

void org.keycloak.authorization.policy.evaluation.AbstractDecisionCollector.onComplete ( ResourcePermission  permission)
inlineinherited

org.keycloak.authorization.Decision< D extends Evaluation >を実装しています。

82  {
83  Result result = results.get(permission);
84 
85  if (result != null) {
86  onComplete(result);
87  }
88  }
final Map< ResourcePermission, Result > results
Definition: AbstractDecisionCollector.java:35
void onComplete()
Definition: AbstractDecisionCollector.java:77

◆ onComplete() [4/4]

void org.keycloak.authorization.policy.evaluation.AbstractDecisionCollector.onComplete ( Collection< Result permissions)
inlineprotectedinherited
94  {
95 
96  }

◆ onDecision() [1/2]

void org.keycloak.authorization.Decision< D extends Evaluation >.onDecision ( evaluation)
inherited

◆ onDecision() [2/2]

void org.keycloak.authorization.policy.evaluation.AbstractDecisionCollector.onDecision ( DefaultEvaluation  evaluation)
inlineinherited
38  {
39  Policy parentPolicy = evaluation.getParentPolicy();
40  ResourcePermission permission = evaluation.getPermission();
41 
42  if (parentPolicy != null) {
43  if (parentPolicy.equals(evaluation.getPolicy())) {
44  results.computeIfAbsent(permission, permission1 -> {
45  for (Result result : results.values()) {
46  Result.PolicyResult policyResult = result.getPolicy(parentPolicy);
47 
48  if (policyResult != null) {
49  Result newResult = new Result(permission1, evaluation);
50  Result.PolicyResult newPolicyResult = newResult.policy(parentPolicy);
51 
52  for (Result.PolicyResult associatePolicy : policyResult.getAssociatedPolicies()) {
53  newPolicyResult.policy(associatePolicy.getPolicy(), associatePolicy.getEffect());
54  }
55 
56  Map<String, Set<String>> claims = result.getPermission().getClaims();
57 
58  if (!claims.isEmpty()) {
59  permission1.addClaims(claims);
60  }
61 
62  return newResult;
63  }
64  }
65 
66  return null;
67  }).policy(parentPolicy);
68  } else {
69  results.computeIfAbsent(permission, p -> new Result(p, evaluation)).policy(parentPolicy).policy(evaluation.getPolicy(), evaluation.getEffect());
70  }
71  } else {
72  results.computeIfAbsent(permission, p -> new Result(p, evaluation)).setStatus(evaluation.getEffect());
73  }
74  }
final Map< ResourcePermission, Result > results
Definition: AbstractDecisionCollector.java:35

◆ onError()

void org.keycloak.authorization.policy.evaluation.DecisionPermissionCollector.onError ( Throwable  cause)
inlineinherited

org.keycloak.authorization.Decision< D extends Evaluation >を実装しています。

135  {
136  throw new RuntimeException("Failed to evaluate permissions", cause);
137  }

◆ onGrant()

void org.keycloak.authorization.policy.evaluation.DecisionPermissionCollector.onGrant ( Permission  permission)
inlineprotectedinherited
177  {
178 
179  }

◆ results()

Collection<Permission> org.keycloak.authorization.policy.evaluation.DecisionPermissionCollector.results ( )
inlineinherited
130  {
131  return permissions;
132  }
final List< Permission > permissions
Definition: DecisionPermissionCollector.java:47

メンバ詳解

◆ results

final Map<ResourcePermission, Result> org.keycloak.authorization.policy.evaluation.AbstractDecisionCollector.results = new LinkedHashMap<>()
protectedinherited

このクラス詳解は次のファイルから抽出されました: