авторизация пользователей с помощью cancan и devise - PullRequest
2 голосов
/ 19 октября 2011

У меня есть пользовательская модель, созданная с помощью Devise, которая имеет логическое поле администратора и целое поле ролей. Я пытаюсь создать класс способностей, который позволяет пользователю без прав администратора иметь определенные способности, основанные на ролях, но у меня есть проблемы с этим процессом. Я создал авторизованный контроллер как таковой:

class AuthorizedController < ApplicationController
 before_filter :authenticate_user!
 check_authorization :unless => :devise_controller?
 load_and_authorize_resource

 rescue_from CanCan::AccessDenied do |exception|
  flash[:alert] = exception.message
  redirect_to root_url
 end

end

class Ability
  include CanCan::Ability

  def initialize(user)
    if !user
    can  :read, :all
  end

  if user 
    admin_rules if user.admin?
    commenter_rules if user.role.equal?("1")
    author_rules if user.role.equal?("2")
  end     
end

  def admin_rules
    can :manage, :all
  end

  def commenter_rules
    can :manage, Data, :active => true, :user_id => user.id
  end

  def author_rules
    can :manage, Post, :active => true, :user_id => user.id
  end 
end

Теперь, когда я пытаюсь получить доступ к каким-либо страницам, выдается сообщение об исключении «Вы не авторизованы для доступа к этой странице». вместо того, чтобы иметь доступ к этой части сайта.

1 Ответ

1 голос
/ 09 февраля 2012

У меня ощущение, что cancan работает правильно. Попробуйте отладить так:

  1. Временно достаньте check_authorization
  2. Добавьте несколько строк в ваше представление, чтобы увидеть, какие у вас есть способности:

    %h1 What abilities do I have?
    %ul
      %li can?(:manage, Data)
      %li can?(:manage, :all)
      %li etc..
    
...