devise + cancan не блокирует доступ к проблеме с индексом wherer @proj = Proj.all - PullRequest
1 голос
/ 27 августа 2010

У меня есть приложение, которое использует Devise и CanCan.в конфигурации> инициализаторы> класс Abiliity.rb Возможность включает CanCan :: Ability

  def initialize(user)
    if user.is? :superadmin
      can :manage, :all
    elsif user.is? :user
      can :read, Project do |project|
         project && project.users.include?(user)
      end
    end
  end
 end

У меня проблема с действием индекса контроллера проекта, контроллер проекта является обычным стандартным контроллером RESTful.По сути, пользователь, который является обычным пользователем, при входе в систему может видеть индекс # проектов.Но не во всех проектах этот пользователь имеет статус «обычный пользователь», почему он не может заблокировать его доступ?

Спасибо

1 Ответ

2 голосов
/ 27 августа 2010

Убедитесь, что вы звоните load_and_authorize_resource в вашем ProjectsController, в соответствии с:

class ProjectsController < ApplicationController
  load_and_authorize_resource

  #...
end

Если это все еще не работает, попробуйте вызвать метод authorize! внутри действия index, чтобы увидеть, имеет ли это значение, например:

class ProjectsController < ApplicationController
  #...

  def index
    @projects = Project.all
    authorize! :read, @projects
  end

  #...
end
...