2011-01-06 11 views
2

私は、 "ドキュメント"を操作するユーザーがいるRails 3サイトを持っています。各文書は私の文書コントローラの編集方法のために、その後のuser_idを持っていた場合返されたレコードをユーザーの役割に基づいて制限する方法はありますか?

私は何かのように、現在のユーザーが所有する文書に結果を制限できます。

@doc = current_user.documents.find(params[:id]) 
respond_with(@doc) 

残念ながら、それは単純ではありません。各ユーザーは、中間の「サブスクリプション」によってドキュメントとの関係を持つことができます。これらのドキュメントは、所有者、エディタ、またはリーダーです。

これで、私の編集方法では、取得した文書を所有者または編集者である人に限定したいと考えています。これはどうすればいいですか?現在、私は次のように私の文書モデルにスコープを持っている:私はその後、私の編集方法で行くことができるように

scope :editable_by, lambda { |user| joins(:subscriptions).where("user_id = ? AND (subscriptions.role = ? OR subscriptions.role = ?)", user.id, Subscription::ROLES['owner'], Subscription::ROLES['editor']) } 

@doc = Document.editable_by(current_user).find(params[:id]) 

よりよい方法はありますか?

答えて

1

私はあなたがより良い方法を見つけるとは思わない。たとえば、モデルにアクセス権を示す属性(たとえば、owner_id)がある場合にのみ、ヘルパーメソッドが組み込まれた認可にCanCanを使用する傾向があります。

それ以外の場合は、モデルにスコープまたはメソッドを実装する必要があります。だから私が間違っていない限り、あなたは現在のものよりも良い方法を見つけることが難しいでしょう。

+0

Ta。私はそれと一緒に行くつもりです。私はまあまあそれを得たことを知ってよかった。 – kmc

関連する問題