public CachedPermissionTicket(Long revision, PermissionTicket permissionTicket) { super(revision, permissionTicket.getId()); this.owner = permissionTicket.getOwner(); requester = permissionTicket.getRequester(); this.resourceServerId = permissionTicket.getResourceServer().getId(); this.resourceId = permissionTicket.getResource().getId(); if (permissionTicket.getScope() != null) { this.scopeId = permissionTicket.getScope().getId(); } this.granted = permissionTicket.isGranted(); createdTimestamp = permissionTicket.getCreatedTimestamp(); grantedTimestamp = permissionTicket.getGrantedTimestamp(); Policy policy = permissionTicket.getPolicy(); if (policy != null) { this.policy = policy.getId(); } }
@Override public PermissionTicket create(String resourceId, String scopeId, String requester, ResourceServer resourceServer) { PermissionTicket created = getPermissionTicketStoreDelegate().create(resourceId, scopeId, requester, resourceServer); registerPermissionTicketInvalidation(created.getId(), created.getOwner(), created.getRequester(), created.getResource().getId(), scopeId, created.getResourceServer().getId()); return created; }
@Override public void delete(String id) { if (id == null) return; PermissionTicket permission = findById(id, null); if (permission == null) return; cache.invalidateObject(id); String scopeId = null; if (permission.getScope() != null) { scopeId = permission.getScope().getId(); } invalidationEvents.add(PermissionTicketRemovedEvent.create(id, permission.getOwner(), permission.getRequester(), permission.getResource().getId(), scopeId, permission.getResourceServer().getId())); cache.permissionTicketRemoval(id, permission.getOwner(), permission.getRequester(), permission.getResource().getId(), scopeId, permission.getResourceServer().getId(), invalidations); getPermissionTicketStoreDelegate().delete(id); UserManagedPermissionUtil.removePolicy(permission, StoreFactoryCacheSession.this); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || !(o instanceof Policy)) return false; PermissionTicket that = (PermissionTicket) o; return that.getId().equals(getId()); }
@Override public String getRequester() { if (isUpdated()) return updated.getRequester(); return cached.getRequester(); }
@Override public String getOwner() { if (isUpdated()) return updated.getOwner(); return cached.getOwner(); }
@Override public Long getCreatedTimestamp() { if (isUpdated()) return updated.getCreatedTimestamp(); return cached.getCreatedTimestamp(); }
@Override public boolean isGranted() { if (isUpdated()) return updated.isGranted(); return cached.isGranted(); }
@Override public Long getGrantedTimestamp() { if (isUpdated()) return updated.getGrantedTimestamp(); return cached.getGrantedTimestamp(); }
@Override public Policy getPolicy() { if (isUpdated()) return updated.getPolicy(); return cacheSession.getPolicyStore().findById(cached.getPolicy(), cached.getResourceServerId()); }
public static PermissionTicketEntity toEntity(EntityManager em, PermissionTicket permission) { if (permission instanceof PermissionTicketAdapter) { return ((PermissionTicketAdapter)permission).getEntity(); } else { return em.getReference(PermissionTicketEntity.class, permission.getId()); } }
@Override public List<PermissionTicket> findGranted(String userId, String resourceServerId) { String cacheKey = getPermissionTicketByGranted(userId, resourceServerId); return cacheQuery(cacheKey, PermissionTicketListQuery.class, () -> getPermissionTicketStoreDelegate().findGranted(userId, resourceServerId), (revision, permissions) -> new PermissionTicketListQuery(revision, cacheKey, permissions.stream().map(permission -> permission.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId); }
@Override public String getId() { if (isUpdated()) return updated.getId(); return cached.getId(); }
@Override public List<PermissionTicket> findByResource(String resourceId, String resourceServerId) { String cacheKey = getPermissionTicketByResource(resourceId, resourceServerId); return cacheQuery(cacheKey, PermissionTicketResourceListQuery.class, () -> getPermissionTicketStoreDelegate().findByResource(resourceId, resourceServerId), (revision, permissions) -> new PermissionTicketResourceListQuery(revision, cacheKey, resourceId, permissions.stream().map(permission -> permission.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId); }
@Override public List<PermissionTicket> findByScope(String scopeId, String resourceServerId) { String cacheKey = getPermissionTicketByScope(scopeId, resourceServerId); return cacheQuery(cacheKey, PermissionTicketScopeListQuery.class, () -> getPermissionTicketStoreDelegate().findByScope(scopeId, resourceServerId), (revision, permissions) -> new PermissionTicketScopeListQuery(revision, cacheKey, scopeId, permissions.stream().map(permission -> permission.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId); }
@Override public List<PermissionTicket> findByOwner(String owner, String resourceServerId) { String cacheKey = getPermissionTicketByOwner(owner, resourceServerId); return cacheQuery(cacheKey, PermissionTicketListQuery.class, () -> getPermissionTicketStoreDelegate().findByOwner(owner, resourceServerId), (revision, permissions) -> new PermissionTicketListQuery(revision, cacheKey, permissions.stream().map(permission -> permission.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId); }
@Override public void updateScopes(Set<Scope> scopes) { Resource updated = getDelegateForUpdate(); for (Scope scope : updated.getScopes()) { if (!scopes.contains(scope)) { PermissionTicketStore permissionStore = cacheSession.getPermissionTicketStore(); List<PermissionTicket> permissions = permissionStore.findByScope(scope.getId(), getResourceServer().getId()); for (PermissionTicket permission : permissions) { permissionStore.delete(permission.getId()); } } } PolicyStore policyStore = cacheSession.getPolicyStore(); for (Scope scope : updated.getScopes()) { if (!scopes.contains(scope)) { policyStore.findByResource(getId(), getResourceServer().getId(), policy -> policy.removeScope(scope)); } } cacheSession.registerResourceInvalidation(cached.getId(), cached.getName(), cached.getType(), cached.getUris(modelSupplier), scopes.stream().map(scope1 -> scope1.getId()).collect(Collectors.toSet()), cached.getResourceServerId(), cached.getOwner()); updated.updateScopes(scopes); }