モデル用のRESTfulコントローラーがありますUserResource
。というカスタムアクションを追加しましたremote_update
。ユーザーのIDが一致する場合にのみそのアクションを制限したいと思います。
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :regular
can [:remote_update], UserResource, :user_id => user.id
end
load_and_authorize_resource
コントローラーで使用しています。
問題は、ユーザーIDが一致しなくても、ユーザーがそのアクションを使用できることです。(テストするために、Firebugを使用し、idの非表示の値を変更しています)。
私のルートは次のとおりです。
resources :user_resources do
collection do
post 'remote_update'
end
終わり
https://github.com/ryanb/cancan/wiki/Authorizing-controller-actionsによると、カスタムアクションがある場合、Cancanは次のリンクからIDを使用してリソースを読み込もうとします。
def discontinue
# Automatically does the following:
# @product = Product.find(params[:id])
# authorize! :discontinue, @product
end
GETやPUTではなくPOSTであるため、IDを定義していません。能力を構築する方法についての考え?ありがとうございました。