私はポーリングアプリに取り組んでおり、認証と承認にDeviseとCancanを使用しています。Devise によって生成された User モデルと Poll モデルがあります。投票はユーザーに属します。私の問題は、Polls コントローラーにカスタム アクションがあり、そのカスタム アクションで Cancan を動作させることができないことです。これは私が私のコードでやろうとしたことです:
config/routes.rb:
match 'users/:user_id/polls' => 'polls#show_user'
アビリティ.rb:
def initialize(user)
user ||= User.new
if user.is? :admin
can :manage, :all
else # default
can :read, :all
can :manage, Poll, :user_id => user.id
can :show_user, Poll, :user_id => user.id
end # if else admin
end
polls_controller.rb:
class PollsController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource :except => :show_user
def show_user
authorize! :show_user, user
@polls = Poll.find_all_by_user_id(params[:user_id])
render "index"
end
<...>
end
アイデアは、投票の所有者がサインインしている場合にのみユーザーの投票を表示できるということです。ただし、このコードでは、投票の所有者がサインインしている場合、そのユーザーはそのページから追い出され、認証に失敗したというメッセージが表示されます。 . 行を削除すると、authorize! :show_user, user
サインインしているユーザーは他のすべてのユーザーの投票を表示できます (承認はまったく機能しません)。
私が見逃している可能性のあるものを誰かが見ることができますか? 前もって感謝します!