ここで提供された提案を受けて、RoleVoter を拡張する独自の RoleVoter クラスを実装しました。追加する必要がある追加のチェックは、セッションに保存した組織に基づいて、ユーザー、役割、および組織がすべて並んでいることです。
次の UserRole クラスがあります。
class UserRole implements Serializable {
User user
Role role
Organization organization
....
}
そして、これは私の OrganizationRoleVoter クラスです:
class OrganizationRoleVoter extends RoleVoter {
@Override
public int vote(Authentication authentication, Object object, Collection<ConfigAttribute> attributes) {
int result = ACCESS_ABSTAIN
Collection<? extends GrantedAuthority> authorities = extractAuthorities(authentication)
attributes.each {ConfigAttribute attribute ->
if (this.supports(attribute)) {
result = ACCESS_DENIED
authorities.each {GrantedAuthority authority ->
//TODO this should also check the chosen organization
if (attribute.attribute.equals(authority.authority)) {
return ACCESS_GRANTED
}
}
}
}
return result
}
Collection<? extends GrantedAuthority> extractAuthorities(Authentication authentication) {
return authentication.getAuthorities();
}
}
私の TODO でわかるように、ここで私が言う必要があるのは、「ここで与えられている権限は、私がセッションに配置した組織に沿ったものでもあります。これを達成する方法について本当に途方に暮れています.