あなたは@PostFilter
と@PreFilter
を見てみたいです。彼らはほとんど@PreAuthorize
のように動作しますが、リストから結果を削除できます。また、あなたはまだそれをやっていないと仮定して、あなたのユーザーに異なる役割を割り当てる必要があります。
管理者のようにすべてを見ることができるようなグローバルルールは、PermissionEvaluator
の具体的な実装を記述することで実装できます。あなたはそれを次に追加します。MethodSecurityExpressionHandler
時間は簡単な例です。
このコードはテキストエディタで書かれています。これは、コンパイルして非常に単純
Aを必要なステップを表示するにはここでしかありませんかもしれPermissionEvaluator
public class MyPermissionEvaluator implements PermissionEvaluator {
private static final SimpleGrantedAuthority AUTHORITY_ADMIN = new SimpleGrantedAuthority('admin');
public boolean hasPermission(final Authentication authentication, final Object classId, final Object permission) {
boolean permissionGranted = false;
// admin can do anything
if (authentication.getAuthorities().contains(AUTHORITY_ADMIN)) {
permissionGranted = true;
} else {
// Check if the logged in user is in the same class
}
return permissionGranted;
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType,
Object permission) {
return false;
}
}
その後方法のセキュリティは
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Bean
public MethodSecurityExpressionHandler methodSecurityExpressionHandler(final PermissionEvaluator permissionEvaluator){
DefaultMethodSecurityExpressionHandler securityExpressionHandler = new DefaultMethodSecurityExpressionHandler();
securityExpressionHandler.setPermissionEvaluator(permissionEvaluator);
return securityExpressionHandler;
}
@Bean
public PermissionEvaluator permissionEvaluator() {
return new MyPermissionEvaluator();
}
}
は、今、私たちは法
に私たちのフィルタを使用することができます設定
@PostFilter("hasPermission(filterObject.getClassId(), 'READ')")
@Override
public List<Student> getAll() {
return querySomeStudents();
}
hasPermission
i n @PostFilter
ACLはMyPermissionEvaluator
にhasPermission
を呼び出します。 filterObject
は、リスト内の個々の項目を参照します。コードがfalseを返す場合は、リストから項目を削除します。
ご注意いただきありがとうございます!私はたくさんのROLEを作成する必要があります。それは最高の解決策ですか? –