Разработать метод current_user в результатах CanCan с ошибкой undefined method - PullRequest
0 голосов
/ 19 марта 2011

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

    <%= f.hidden_field (:author, :value =>current_user.email) %>

Итак, теперь в файле способностей CanCan я пытаюсь использовать этот код:

  class Ability  
  include CanCan::Ability 

  def initialize(user)  
    user ||= User.new    
    if user.role? :admin  
      can :manage, :all  
    else 
        can :read, :all  
      end
      if
        user.role?(:normal)
        can :create, Event  
        can :update, Event do |event|  
          event.try(:author) == current_user.email
      end 
        can :create, Comment  
        can :update, Comment do |comment|  
        comment.try(:author) == current_user.email 
      end 
    end 
  end

end

Но это приводит меня к этой ошибке:

неопределенная локальная переменная или метод `current_user 'для #

Затем я попытался изменить

can :update, Event do |event|  
          event.try(:author) == current_user.email

до

event.try(:author) == Devise.current_user.email

но это приводит к этой ошибке

неопределенный метод `current_user 'для Devise: Module

Итак, что должноЯ делаю, и как я могу вызвать метод "current_user" из способность .rb?Заранее благодарю за любые советы.

1 Ответ

6 голосов
/ 19 марта 2011

Почему вы ссылаетесь на current_user в вашем методе инициализации? Почему бы не просто user, который был указан в качестве аргумента метода?

CanCan будет вызывать инициализацию для current_user, когда это необходимо.

...