キーワード

したいこと

ロール(roles)に紐づける権限(authorities)に応じて、特定の処理をガードしたい。権限があるユーザーだけが処理できるように。

どうやって

URLを拾ってガードすることもできるようだけど、権限の分だけURLの名前をつけ分けることは難しいので、サービスのメソッドにガードをかけるようにする。

ようにする。

@PreAuthorize("hasAuthority('ADD_SOME_DATA')")
@Transactional(readOnly = false)
fun add(someData: SomeData) {
  /* ガードがかかる追加処理 */
}

文字列で設定するのが少し気持ち悪い。開発初期の段階で、権限の名称を変えるときなんかに注意。

ちなみに

有効化

@PreAuthorizeによる権限チェックをするにはSecurityConfigで次の設定をする必要がある。

@EnableGlobalMethodSecurity(prePostEnabled = true) // <-- これ
@Configration
class SecurityConfig: WebSecurityConfigurerAdapter {
  ...

範囲

@PreAuthorizeをクラスにつければどのメソッドでも権限チェックできる。

参考

Last-modified: 2018-02-21 (水) 14:16:48 (578d)