我正在开发一个投票应用程序,并使用 Devise 和 Cancan 进行身份验证和授权。我有一个由 Devise 生成的用户模型和一个投票模型。投票属于用户。我的问题是我的 Polls 控制器中有一个自定义操作,我无法让 Cancan 使用该自定义操作。这是我试图在我的代码中做的:
配置/路由.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
,则已登录的用户可以查看所有其他用户的投票(授权根本不起作用)。
谁能看到我可能缺少的东西?提前致谢!