keycloak-service
静的公開メンバ関数 | 静的非公開メンバ関数 | 全メンバ一覧
org.keycloak.authorization.util.Permissions クラス
org.keycloak.authorization.util.Permissions 連携図
Collaboration graph

静的公開メンバ関数

static ResourcePermission permission (ResourceServer server, Resource resource, Scope scope)
 
static List< ResourcePermission > all (ResourceServer resourceServer, Identity identity, AuthorizationProvider authorization, AuthorizationRequest request)
 
static ResourcePermission createResourcePermissions (Resource resource, Collection< Scope > requestedScopes, AuthorizationProvider authorization, AuthorizationRequest request)
 
static ResourcePermission createResourcePermissions (Resource resource, AuthorizationProvider authorization, AuthorizationRequest request)
 

静的非公開メンバ関数

static List< Scope > populateTypedScopes (Resource resource, AuthorizationProvider authorization)
 

詳解

著者
Pedro Igor

関数詳解

◆ all()

static List<ResourcePermission> org.keycloak.authorization.util.Permissions.all ( ResourceServer  resourceServer,
Identity  identity,
AuthorizationProvider  authorization,
AuthorizationRequest  request 
)
inlinestatic

Returns a list of permissions for all resources and scopes that belong to the given resourceServer and identity.

TODO: review once we support caches

引数
resourceServer
identity
authorization
戻り値
63  {
64  List<ResourcePermission> permissions = new ArrayList<>();
65  StoreFactory storeFactory = authorization.getStoreFactory();
66  ResourceStore resourceStore = storeFactory.getResourceStore();
67  Metadata metadata = request.getMetadata();
68  final AtomicLong limit;
69 
70  if (metadata != null && metadata.getLimit() != null) {
71  limit = new AtomicLong(metadata.getLimit());
72  } else {
73  limit = new AtomicLong(Long.MAX_VALUE);
74  }
75 
76  // obtain all resources where owner is the resource server
77  resourceStore.findByOwner(resourceServer.getId(), resourceServer.getId(), resource -> {
78  if (limit.decrementAndGet() >= 0) {
79  permissions.add(createResourcePermissions(resource, authorization, request));
80  }
81  });
82 
83  // obtain all resources where owner is the current user
84  resourceStore.findByOwner(identity.getId(), resourceServer.getId(), resource -> {
85  if (limit.decrementAndGet() >= 0) {
86  permissions.add(createResourcePermissions(resource, authorization, request));
87  }
88  });
89 
90  // obtain all resources granted to the user via permission tickets (uma)
91  List<PermissionTicket> tickets = storeFactory.getPermissionTicketStore().findGranted(identity.getId(), resourceServer.getId());
92 
93  if (!tickets.isEmpty()) {
94  Map<String, ResourcePermission> userManagedPermissions = new HashMap<>();
95 
96  for (PermissionTicket ticket : tickets) {
97  ResourcePermission permission = userManagedPermissions.get(ticket.getResource().getId());
98 
99  if (permission == null) {
100  userManagedPermissions.put(ticket.getResource().getId(), new ResourcePermission(ticket.getResource(), new ArrayList<>(), resourceServer, request.getClaims()));
101  limit.decrementAndGet();
102  }
103 
104  if (limit.decrementAndGet() <= 0) {
105  break;
106  }
107  }
108 
109  permissions.addAll(userManagedPermissions.values());
110  }
111 
112  return permissions;
113  }
static ResourcePermission permission(ResourceServer server, Resource resource, Scope scope)
Definition: Permissions.java:48
static ResourcePermission createResourcePermissions(Resource resource, Collection< Scope > requestedScopes, AuthorizationProvider authorization, AuthorizationRequest request)
Definition: Permissions.java:115

◆ createResourcePermissions() [1/2]

static ResourcePermission org.keycloak.authorization.util.Permissions.createResourcePermissions ( Resource  resource,
Collection< Scope >  requestedScopes,
AuthorizationProvider  authorization,
AuthorizationRequest  request 
)
inlinestatic
115  {
116  List<Scope> scopes;
117 
118  if (requestedScopes.isEmpty()) {
119  scopes = populateTypedScopes(resource, authorization);
120  } else {
121  scopes = requestedScopes.stream().filter(scope -> resource.getScopes().contains(scope)).collect(Collectors.toList());
122  }
123 
124  return new ResourcePermission(resource, scopes, resource.getResourceServer(), request.getClaims());
125  }
static List< Scope > populateTypedScopes(Resource resource, AuthorizationProvider authorization)
Definition: Permissions.java:137

◆ createResourcePermissions() [2/2]

static ResourcePermission org.keycloak.authorization.util.Permissions.createResourcePermissions ( Resource  resource,
AuthorizationProvider  authorization,
AuthorizationRequest  request 
)
inlinestatic
127  {
128  List<Scope> requestedScopes = resource.getScopes();
129 
130  if (requestedScopes.isEmpty()) {
131  return new ResourcePermission(resource, populateTypedScopes(resource, authorization), resource.getResourceServer(), request.getClaims());
132  }
133 
134  return new ResourcePermission(resource, resource.getResourceServer(), request.getClaims());
135  }
static List< Scope > populateTypedScopes(Resource resource, AuthorizationProvider authorization)
Definition: Permissions.java:137

◆ permission()

static ResourcePermission org.keycloak.authorization.util.Permissions.permission ( ResourceServer  server,
Resource  resource,
Scope  scope 
)
inlinestatic
48  {
49  return new ResourcePermission(resource, new ArrayList<>(Arrays.asList(scope)), server);
50  }

◆ populateTypedScopes()

static List<Scope> org.keycloak.authorization.util.Permissions.populateTypedScopes ( Resource  resource,
AuthorizationProvider  authorization 
)
inlinestaticprivate
137  {
138  List<Scope> scopes = new LinkedList<>(resource.getScopes());
139  String type = resource.getType();
140  ResourceServer resourceServer = resource.getResourceServer();
141 
142  // check if there is a typed resource whose scopes are inherited by the resource being requested. In this case, we assume that parent resource
143  // is owned by the resource server itself
144  if (type != null && !resource.getOwner().equals(resourceServer.getId())) {
145  StoreFactory storeFactory = authorization.getStoreFactory();
146  ResourceStore resourceStore = storeFactory.getResourceStore();
147  resourceStore.findByType(type, resourceServer.getId(), resource1 -> {
148  if (resource1.getOwner().equals(resourceServer.getId())) {
149  for (Scope typeScope : resource1.getScopes()) {
150  if (!scopes.contains(typeScope)) {
151  scopes.add(typeScope);
152  }
153  }
154  }
155  });
156  }
157 
158  return scopes;
159  }

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