2012-03-15 1 views
0

ブロックされたユーザーの概念を紹介したい場合、ユーザーがブロックされているかどうかをチェックするための最適な場所はどこですか?ユーザーがブロックされているかどうかを確認する最適な場所

これまでは、特定のユーザーに特定の操作を実行する権限があるかどうかについてコントローラメソッドに注釈を付けるために、Spring Securityを使用してきました。このブロックされたユーザーのことで、少し複雑になります。私はこれを再度コントローラに取り込もうとするべきでしょうか(おそらくSpringのセキュリティで)、これはドメインオブジェクトに自分自身を決定させるべきものですか?

これはコントローラのレベに置いておく方がいいでしょうが、私のコントローラがif ... else messになることはないと恐れています。

@PreAuthorize("!hasRole('BLOCKED')") 
public void secureMethod(); 

別のアプローチになります。

+2

「ブロック済み」とはどういう意味ですか? – Stefan

答えて

1

一つのアプローチは、「ブロック」と呼ばれる役割を紹介し、彼らがブロックされているときに、すべてのユーザーに割り当てると、ブロックされたユーザーがそれらをアクセスすることを許可していないすべてのメソッドを注釈することができブロックされたステータスをユーザーデータベースまたはその他のストレージに格納すること。 UserDetailsServiceを拡張して、 "blocked"フラグを含む追加のユーザー情報を返します。そして再びブロックされたユーザーがそれらを実行することはできませんメソッドをフィルタリングするために、セキュリティELを使用します。

@PreAuthorize("!principal.blocked") 
public void secureMethod(); 

UPDATE:あなたがコメントで述べた

問題は、いくつかの同様の方法でアプローチすることができます。

@PreAuthorize("!#photo.owner.blockedUsers.contains(principal.name)") 
public void likePhoto(Photo photo); 

さらに複雑なルールや一般的なルールについては、AOPの側面を使用してコードをあまりにも多くのifからきれいにする助言をします。

+0

ありがとうございます。ブロックされたユーザーは特定の他のユーザーによってブロックされますが、すべてのユーザーによってブロックされないため、最初のアプローチは機能しません。 2番目はもっと可能ですが、私はまだコンテキスト所有者の概念を持っていません。たとえば、特定の人が自分の写真を好きにならないようにしたい場合、LikePhotoコントローラメソッドが呼び出されるたびに、プリンシパルがphoto.ownerのブロックリストにあるかどうかを確認する必要があります。これはちょっと難しいです – preslavrachev

+0

これはあなたの説明から特に不明ではありませんでした。 –

関連する問題