2010-12-03 7 views
2

私のコントローラーで添付ファイルRails 3 - CanCan - 作成の許可を定義する

 def upload 

    @attachment = Attachment.build(:swf_uploaded_data => params[:attachment][:attachment], :user_id => current_user.id, :project_id => params[:space_id]) 
.... 
    end 

CanCanから私が望むのは、ユーザーが属するプロジェクトIDにのみアップロードできるようにすることです。コントローラーが正しい情報を取得していることを確認しました。nz x31

ここに私のcancanがあります:

can :upload, Attachment do |attachment| 
    Rails.logger.info 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX- include CanCan::Ability - ATTACHMENT' 
    Rails.logger.info attachment.inspect 
    Rails.logger.info attachment.project 

    current_user.try(:role, attachment.space) 
end 

問題はここにあります。 nilであり、attachment.projectはnilですか? CanCanでこの問題をどのように解決すれば、プロジェクトのチームメンバーだけが添付ファイルをプロジェクトにアップロードできるようにすることができますか?

ありがとう、

答えて

5

ありがとうございます。

そう...

#AttachmentController 

#Will remove it from cancan 
load_and_authorize_resource :except => [:upload] 

def upload 
@attachment = Attachment.build(:swf_uploaded_data => params[:attachment][:attachment], :user_id => current_user.id, :project_id => params[:space_id]) 
    #add the authorize logic explicitly here when you have the attachment model populated 
    authorize! :upload, @attachment 
end 

はそれがあなたのために働くなら、私に教えてください。例えば

0

あなただけの電流ループのイベントを作成できるようにしたい場合:

あなたはビューコントローラ

skip_authorize_resource only: [:new, :create] 

... 

def new 
    @event.loop_id = @loop.id 
    authorize! :create, @event 
end 

#similar for create action 

link.... if can? :create, @loop.events.new 

、その後に使用