Rails 3 - 设计:用户路由

时间:2012-02-21 18:34:32

标签: ruby ruby-on-rails-3 devise cancan

我正在使用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

我该如何解决这个问题? 谢谢!

1 个答案:

答案 0 :(得分:2)

我的问题出在以下几行:

load_and_authorize_resource :only => [:show,:new,:destroy,:edit,:update]

我必须包括:index