2011-06-23 11 views
1

私はユーザーと記事を持っているとしましょう。レコードの所有者に基づくSpring webappのセキュリティ

匿名ユーザーは記事を一覧表示して読むことができます。
登録してログインしたユーザーだけが記事を作成できます。
ユーザーは自分の記事のみを編集できます。
もちろん、管理者は何でもできます。

私は春のセキュリティを見てきましたが、それを行う方法が見つかりませんでした。私のアプリは役割を必要とせず、ACLはあまりにも重いです。

おそらく自分のセキュリティを実装する必要がありますか?

+2

「私のアプリは役割を必要としない」とはどういう意味ですか?あなたはあなた自身の役割を説明しました。 – skaffman

+0

私は匿名でログインしているユーザーだけが必要です。管理者のために私は別のサイトエリアを行うことができます – thik

+1

良い、しかしそれらはまだロールです。 – skaffman

答えて

0

あなたはそうです、ACLはあまりにも多くの作業になります。

JSPでSpring Securityのauthorizeタグを使用すると、principalオブジェクトを介してログインしているユーザーにアクセスできます。 SOME_PRIVILEGE_OR_ROLEは「LOGGED_IN_USER」のようないくつかの役割かもしれないが、また、むしろ例えば、特定の権限を指定することができ

<sec:authorize access="hasRole('SOME_PRIVILEGE_OR_ROLE') and ${someArticle.username} == principal.username"> 
    ... 
</sec:authorize> 

注:指定されたユーザー名とユーザーに記事の編集へのアクセスを制限する例'READ_ARTICLE'または 'UPDATE_ARTICLE'。 Spring Securityは柔軟性があります。どのようなものを選んでも、ユーザーオブジェクトのGrantedAuthoritiesコレクションに存在する必要があります。

また、独自のユーザーオブジェクトを実装して、UserDetailsインターフェイスの提供する情報にさらに詳しい情報を追加することもできます。ユーザー名ではなくユーザーのIDを比較します。

最後に、Spring ELがこの例のように動作するには、最新バージョンのSpring Security(> = 3.1)が必要であることに注意してください。

+0

ありがとう、それは動作します。プログラマチックな方法(私として)を好む人のために。 @PreAuthorize( "hasRole( 'ROLE_USER')および#someArticle.creatorId == principal.id")でコントローラメソッドに注釈を付けることができます。ここで#someArticleはメソッドパラメータです – thik

関連する問題