Я использую устройство с 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
Как я могу это исправить?
Спасибо!