2012-05-04 16 views
1

私はgrailsアプリケーションでACL pluginを使用しようとしています。このチュートリアルで示した例に基づいて、http://grails-plugins.github.com/grails-spring-security-acl/docs/manual/guide/3.%20Tutorial.html@PreAuthorize, @PostAuthorize, @PreFilter, and @PostFilterを実装するServiceを作成する必要があります。ACLプラグインの使い方は?

サービスを作成するのではなく、私のコントローラにこのアプローチを実装したいと思っていました。私は自分の行動の先頭に@PreAuthorizeを使用して試してみましたが、それはエラーメッセージを返します:

Annotation @org.springframework.security.access.prepost.PreAuthorize is not allowed on element FIELD 

は、この平均値は、@PreAuthorize注釈は、コントローラ内の各アクションを呼び出すことは適切ではありませんしていますか?

助けてください。

答えて

3

はい、コントローラでは機能しません。サービス(およびその他のSpring Bean)でのみ機能します。コントローラがSpring Beanであるため2.0コントローラのメソッドで動作するかもしれませんが、試していません。

問題は、Spring SecurityはGroovyのコンセプトなのでクロージャについて何も知らないということです。それらはGrailsによるWebリクエストを処理するために呼び出されますが、メソッドでのみ動作するためSpringによってインターセプトできません。

これは、トランザクションサービスとクロージャの問題に関連しています。サービスでクロージャーを定義することはできません。また、Springがそれを認識しないので、クロージャーをトランザクションにすることはできません。 Groovyでは、メソッドであるかのようにクロージャを呼び出すことができますが、文法的な砂糖だけです。

+0

ありがとうございました!つまり、ACLプラグインを使用するためには、各コントローラのサービスを作成するしかありません。もう1つの質問があります。ACLプラグインを使用する以外に、各アクションに権限を割り当てる別の方法がありますか?どうもありがとうございます! – chemilleX3

+0

コントローラーとサービスの間に1-1は必要ありません。ロジックが似ているので、すべてを1つのサービスにまとめることができるかもしれませんが、確かに少数で十分でしょう。 –

+0

ありがとうございました。私は、上記の注釈を使用するためのサービスを作成する代わりに、私のコントローラ内のアクションをメソッドに変換するだけで、それは論理的なアプローチですか? – chemilleX3

関連する問題