これを何と呼ぶかわからない、オプションはどちらかと同じように適合します、私は関係なく3番目のケースを処理する必要があります。
Scalazはすでにこのようなものを提供している可能性がありますが、別のライブラリがなくても、次の単純なケースを簡潔に処理する方法を知りたいと思っています。
実際のユーザーとユーザーとしてログインした管理者の両方のシナリオでユーザーセッションが存在するかどうかを確認する必要があります。後者が前者よりも優先されます。どちらの条件も存在しない場合は、ログイン画面を表示します。
実際のユーザーセッションチェックは次のようになります。
request.session.get(Security.username) map { id=>
f(Success(id.toInt, request))
} getOrElse( onFail(request) ) // onFail = show login
そして、管理者になりすましているユーザーのケースを追加する必要があります。
request.session.get(Security.impersonate) map { id=>
f(Success(id.toInt, request))
} getOrElse( onFail(request) )
私はそれをすべて一緒に取得することができましたが、少しクリーンアップしたいと思います。操作はユーザーまたはユーザーとしての管理者のケースに関係なく同じです。