我正在使用CanCan设计。我正在使用我的用户模型。 我的用户索引页面是localhost:3000 / users(它仅用于:管理员角色)。
问题是CanCan(或Devise)没有在此路线上检查授权。正在检查所有其他路由(即localhost:3000 /任务)。即,如果我注销系统并键入用户索引页面,则会显示其内容。如果我键入任务路由,它会将我重定向到登录屏幕(正确的行为)。
我认为这是因为Devise的路线而发生的 我的简化用户模型是:
class User < ActiveRecord::Base
has_and_belongs_to_many :roles
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :name, :role_ids, :role, :email, :password, :password_confirmation, :remember_me
def role?(role_check)
self.roles.each do |role|
return true if (role.name.eql? role_check.to_s.humanize )
end
return false
end
def role=(role_id)
self.roles.clear
self.roles << Role.find(role_id)
end
def role
self.roles.first unless self.roles.length == 0
end
end
我的路线如下:
devise_for :users
resources :users
devise_for :users, :controllers => { :registrations => "users/registrations" }
我的能力.rb如下(我还没有定义,它允许所有):
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role? :administrator
can :manage, :all
elsif user.role? :department_header
can :manage, :all
elsif user.role? :staff
can :manage, :all
end
end
end
我该如何解决这个问题? 谢谢!
答案 0 :(得分:2)
我的问题出在以下几行:
load_and_authorize_resource :only => [:show,:new,:destroy,:edit,:update]
我必须包括:index