0

私は春のセキュリティで表現したいAutorizationのカスタムモデルを持っています:

私は役割と権限の概念を持っています:

@Entity
public class User
...............
@ManyToMany
@Column
private Set<Role> roles;


@ManyToMany
@Column
private Set<Permission> permissions;
  }

私のカスタム UserdetailsS​​ervice では、ロールをロードするためのクリーンな方法がありますが、アクセス許可に関連するスプリングセキュリティの方法とコンポーネントが見つかりません:

public class BELUserDetailService implements UserDetailsService {

 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
 User connectedUser = userRepositoy.findUserByUsername(username);

     Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
    for (Role r :connectedUser.getRoles()) {
        authorities.add(new SimpleGrantedAuthority(r.getRoleAWB().name()));
    }


    BELUserDetails belUserDetails = new BELUserDetails(connectedUser.getIdUser(), authorities);
.....
....
    }

}

私の役割は次のとおりです。

管理者 通常のユーザー トランザクション ユーザー

私の権限は次のとおりです。VALIDATE_TRANSATION INIT_TRANSACTION

また、機能的な使用例は、トランザクションを検証する場合、ROLE TRANSACTION USER と権限 VALIDATE_TRANSACTION が必要です。

hasRole("ROLE_TRANSACTION_USER") and hasPermission("VALIDATE_TRANSACTION")

もう1つの重要なケースは、将来、ユーザーがロール「ROLE_TRANSACTION_USER」と権限VALIDATE_TRANSACTIONを持っている場合、トランザクションを検証しようとするときにPermissionEvaluatorを使用していくつかの制限を設けたいということです。この機能は PermissionEvaluator で非常にクールです

そのため、役割と権限の両方の概念を実装する必要があります

spring-security の標準フローに許可を追加する方法。

前もって感謝します 。

4

1 に答える 1

1

デフォルトでは、Spring Security の権限のみがあります。すべての役割と権限を機関コレクションに追加するだけです。次に、次のことができます。

hasRole("ROLE_TRANSACTION_USER") and hasRole("VALIDATE_TRANSACTION")

ほとんどの場合、2 つを混ぜても問題はありません。

Spring Security ACL モジュールにアクセス許可がありますが、ドメイン オブジェクトごとに異なるセキュリティ ルールを設定する場合にのみ ACL が必要です。

編集。追加のセキュリティ チェックを行う最も簡単な方法は、SpEL を使用することだと思います。例:

@PreAuthorize("hasRole('ROLE_TRANSACTION_USER') 
     and hasRole('VALIDATE_TRANSACTION') 
     and @amountValidatorServiceBean.isAmountValidForCurrentUser(#amount)")
public void doTransaction(Integer amount, ...)
于 2013-08-30T15:19:32.487 に答える