2011-07-11 10 views
5

メンバーと非メンバーエリアでプレイするウェブサイトを作ろうとしています。だから私はメンバと非メンバメソッドでコントローラを持っています。しかし、私はコントローラ全体を安全にすることができます[@With(Secure.class)]。 いくつかのメソッドを安全にし、ログインせずに他のメソッドにアクセスすることは可能でしょうか?安全な方法と安全でない方法のPlay Frameworkコントローラ。可能?

ありがとう

答えて

1

はい、これにすることができます。 @With注釈を削除し、あなたが接続しているユーザへのアクセスを制限したいときセキュアコントローラのこのメソッドを使用します。

Secure.checkAccess(); 

この方法では、あなたも@Checkアノテーションを使用することができます。例:

@Check("member") 
    public static void restrictedAction() { 
     Secure.checkAccess(); 
     ... 
    } 
+0

モジュール内のコントローラからcheckAccessメソッドを呼び出そうとしたことがありますか?それは動作していないようです。メソッドが表示されないというエラーがスローされます。実際、メソッドの定義を見ると、デフォルトでpublicとして指定されていません。どのようにして、アプリコントローラで問題なく動作しますか? – preslavrachev

1

いいえ、これを行う簡単な方法はありません。役割は確認できますが、接続されたユーザー、訪問者は確認できません。

@Beforeアノテーションを追加する必要がありますが、少し複雑になります。コントローラを複数のコントローラに分割するだけです。ちなみに、公的/私的な方法を混ぜるのではなく、それをfunctionnalyにする方がいいです。

3

はい、できます、それはセキュリティで保護されたクラスにいくつかの調整が必要になりますが。 @Secureをチェックすると、@Beforeでアノテーションされたメソッドがあります。 documentationによれば、@Beforeがどのメソッドに適用され、どのメソッドがスキップされたのかを指定することができます。

@Before(unless="login") 

したがって、パブリックメソッドで@Beforeを実行しないことが問題になります。 @Withを使用すると正しく動作しない可能性があることに注意してください。セキュリティを管理するコントローラーで@Beforeを独自に作成する必要があります(適切なメソッドを安全に呼び出す)。

しかし、安全なユーザー用とパブリックメソッド用の2つのコントローラーを持つ方が簡単です。

+0

私のupvoteは、2つのコントローラの提案です。 'Before'アノテーションがスキップする必要のないメソッド名の配列で正しく動作しないため、この質問に来ました。私の場合、「With」を使用すると正しく動作しない可能性があります。それはなぜですか?バグ、またはデザインの副作用?ありがとう! – palako

関連する問題