読者です 読者をやめる 読者になる 読者になる

S2Buriでユーザ権限ごとにアクセス制御

seasar

ParticipantProviderを実装して使うわけですね。

S2Buriでは、判断用のユーザ情報をこのParticipantProviderの実装に渡す方法として、2種類用意されています。

  • (A)コンテナからBaoが勝手に取得する (普通はsessionスコープで保持してるユーザ情報を使う) (USER定数利用)
  • (B)Baoのクライアントクラスが、Baoのメソッドの引数で渡す (_ARG定数アノテーション利用)

個人的な好みとして前者はちょっとイヤンなので、後者で。理由はsessionスコープな情報を勝手に裏のほうで使って欲しくないので。

(B)は、[Baoのメソッド名]_ARGという定数アノテーションを使ってあげることで、引数でuserDataを渡していることをS2Buriに教えてあげる必要があります。


で、問題はBaoの複数の処理系メソッドを順番に実行してフローを流していくんですが、ParticipantProvider#isUserInRole()メソッドが最初の1つ目のBaoメソッドのときしか実行されないのです。
期待する動作としては、userDataを渡しているすべてのBaoメソッドごとにロール権限のチェックが入って欲しいわけですが…。

他のメソッドも似たようなAPIなのになー。

今のところちょっと条件を変えて試してみた結果は以下の通り。明日あたりにもうちょっと情報をとってみようかと思います。

  • 成功するメソッドを2回連続呼び出してからフローの続きを流していくと、そのメソッド実行したときに1つ目のisUserInRole()が実行されて、3つ目のメソッド辺りの後にisUserInRole()が2回(!?)実行される。というもうわけがわからない状態。なんかキャッシュがきいてる?
  • とりあえずisUserInRole()が実行されるBaoメソッドは、ACTIVITYもACTIONもRESULTも指定していない、フローに対する初期登録メソッド。ARGSアノテーションのみ。
    • NGなBaoメソッドには、ACTIVITYアノテーションもつけているが、ためしにはずしてみても動作変わらず。