これは具体的には grails 1.3.7 アプリケーションに関するものですが、新しいバージョンでも回答が機能することを願っています。以下のコードは、必要なものを簡略化したものです。accountService が注入されています。以下のスニペットは本来の機能を果たしていますが、明らかにコードが繰り返されています。これは、grails-app/conf にある UserFilter クラスにあります。
フィルターから一般的なロジックを抽出し、リダイレクトしてセッションをチェックする機能を維持するにはどうすればよいですか? セッションとフラッシュを渡してメソッドをフィルター クラスに抽出しようとしましたが、リダイレクトによってまだ問題が発生していました。
def filters = {
// ... other filters ...
adminAllCheck(controller: 'administration', action: '*') {
before = {
if(!session.isAdmin) {
if(accountService.isAdmin()) {
session.isAdmin = true
} else {
flash.message = 'Non admin'
redirect(controller: 'home', action: 'index')
return false
}
}
true
}
}
userListCheck(controller: 'user', action: 'list') {
before = {
if(!session.isAdmin) {
if(accountService.isAdmin()) {
session.isAdmin = true
} else {
flash.message = 'Non admin'
redirect(controller: 'home', action: 'index')
return false
}
}
true
}
}
}