2012-03-13 27 views
1

私はGrailsのWebサイトを作成しています。そこでは、ユーザーが自分が作成したリソースにアクセスできるようになります。ここまで私はすべてが分かります。私はROLE_USERを定義し、Config.groovyファイルを使用してコントローラとアクションをロックダウンします。春のセキュリティを使用するWebサイトのグループアクセス許可 - デザインクエリ

私が直面している問題は、ユーザーが作成したリソースの一部を同じグループの他のユーザーが編集/更新/削除できるようにユーザーグループをサポートするという要件があることです。どのように私は春のセキュリティの "グループ"とユーザーを関連付けるか、私はここで使用する必要があるデザイン/ライブラリは何ですか?

答えて

1

あなたがする必要があることは、ユーザーの役割(権限)をデータベースから取得することです。その場合、ユーザー(またはユーザーのセット)が持つ役割を簡単に調整し、その場で作成/削除することができます。ドキュメントには、データベースからロールを取得する方法についてのかなり良い情報がありますので、ここではこれ以上は触れません。

ただし、動的ロールが設定されている場合でも、作成されたオブジェクトにロールを接続できる必要があります。

  1. アクセス制御が必要な粒度とあなたが望む柔軟性によって
  2. カスタム・ロジック

を一覧表示し、一つの選択肢は、より魅力的なことがありますあなたがこれを行うに取り掛かることができる2つの方法が基本的にあります。別のものよりも。

アクセスコントロールリストを使用すると、各ユーザーと各エンティティインスタンスの間にアクセス許可マッピングを持つことができます。あなたが想像することができるように、それはかなりのオーバーヘッドであり、あなたが多数のエンティティとユーザーを持っていればパフォーマンスが悪くなります。

エンティティインスタンスまたはエンティティクラスをユーザーとそのロールに接続するための独自のスキームを設定できるため、独自のロジックを組み合わせる方がずっと柔軟です。

1

私は春のセキュリティは、すぐにそのような機能を提供すると思いませんので、手動で行う必要があります。現在の役割は、ユーザーにログインした場合、あなたはこの種の機能、あなたがチェックする必要があります/更新に

def authenticateService 

def user = authenticateService.principal() 
entity.setUser(user?.getUsername()) 

次に、ユーザーに現在のログに記録されたのユーザー名を保存するcontoller方法を削除する各ドメインクラスの は、エンティティを作成したユーザのロールに一致します。一致がある場合は更新/削除を続行する必要があります。そうでない場合は例外をスローする /エラーページにリダイレクトする

ロールとしては、セキュリティロールを使用することも、ユーザーオブジェクトにプロパティを作成することもできます作成済み

+0

ロールの使用に関する問題誰かが「グループ」を開始するたびに、新しいロールをこのグループのユーザーに動的に割り当てる必要があり、これは実現可能ではないと考えられます。私は意味がありましたか? – Abe

+0

私は理解しているかわかりません。これは、新しい役割が導入されたときにこれが通常の手順であると思われるため、一部のユーザーに割り当てる必要があります。 – dimcookies

関連する問題