S2Buriでユーザ権限ごとにアクセス制御
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回(!?)実行される。というもうわけがわからない状態。なんかキャッシュがきいてる?