2012-01-05 2 views
3

Rails3アプリケーションでは、私はuser_idでいくつかのモデルを持っています - これは私が言っていることです:それはいくつかのユーザーによって作成されました。IDによるユーザーのアクセス許可を確認する最も良い方法は?

同様:

current_user.id #=> 1 
@item.user_id #=> 1 
# this item created by user with id 1 

と私は彼/彼女によって作成されていない項目にCURRENT_USERのアセスを制限したいです。私は、このようなuser_idを持つモデルの倍数(およびコントローラ破壊する/編集/表示する)を持っているので、このための最善の方法は何

if @item.user_id == current_user.id 
    #everything is fine 
else 
    #redirect somwhere with flash "You don't have an access here" 
end 

:よう

何か?

答えて

4

CanCanを使用してください。それによって

あなたは、このように、宣言的に権限を定義することができるようになります:

can :read, Project, :user_id => user.id 

以降、このルールを適用する:

def show 
    @project = Project.find(params[:id]) 
    authorize! :read, @project 
end 

authorize!は、例外が発生しますが、あなたはAで確認することができますより平和的な方法:

<%= link_to 'Link to a project', @project if can? :read, @project %> 

許可を傍受することができますエラーを処理して1か所で処理します。

class ApplicationController < ActionController::Base 
    rescue_from CanCan::AccessDenied do |exception| 
    redirect_to root_url, :alert => exception.message 
    end 
end 
0

これを行う最も簡単な方法は、アクティブレコードのhas_manyを使用することです。

すなわち、コントローラでは、あなたがItemをロードするたびに、あなただけの

@item = current_user.items.find(params[:id]) 

あなたがチェックするためにすべての作業を行う必要はありません。この方法を言います。