私は Grails で小さな webapp を作成しており、すべてのユーザーが認証されていることを確認するために、次のフィルターを使用しています。
class LoginFilters {
static filters = {
loginCheck(controller:'*', action:'*') {
before = {
if (session.user_id) {
request.user = User.get(session.user_id)
} else if (!actionName.equals("login")) {
redirect(controller: "login", action: "login")
return false
}
}
}
}
}
そして、すべてのコントローラー メソッドは、リクエスト オブジェクトのユーザー プロパティを読み取ることから始まります。
def actionName = {
def user = request.user
...
}
上記のコードは機能しますが、すべてのコントローラー メソッドでコードが重複するのは避けたいと思います。フィルターがユーザー オブジェクトを "request.user" ではなく "user" という名前の変数にバインドして、すべてのコントローラーからアクセスできるようにすることは可能でしょうか?
これを不可能にするスコープの問題があるかもしれないことは理解していますが、Grails フレームワークは内部でかなりの魔法を作成できるように思われるので、質問する価値があるかもしれないと考えました。