Rails 3 - Devise: маршрут пользователя - PullRequest
1 голос
/ 21 февраля 2012

Я использую устройство с CanCan. Я использую свою модель пользователя. Моя страница индекса пользователя localhost: 3000 / users (она включена только для: роли администратора).

Проблема в том, что CanCan (или Devise) не проверяет авторизацию на этом маршруте. Все остальные маршруты (то есть localhost: 3000 / tasks) проверяются. Т.е., если я выхожу из системы и набираю страницу индекса пользователей, она отображает ее содержимое. Если я наберу маршрут задач, он перенаправит меня на экран входа в систему (правильное поведение).

Я думаю, что это происходит из-за маршрутов 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 Ответ

2 голосов
/ 21 февраля 2012

Моя проблема была в следующей строке:

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

Я должен включить: индекс

...