Как сделать current_user всегда не нулевым в приложении Rails?

Пожалуйста, дайте мне какое-нибудь представление о небольшой проблеме: в моем приложении Rails 3 мне нужно, чтобы current_user всегда был НЕ нулевым. Я использую Devise и CanCan для системы аутентификации и думаю о том, как реализовать пользователя «guest». Для таких ролей, как «admin», это работает нормально ( if current_user.is? :admin), но если пользователь не вошел в систему, я хочу проверить не user_signed_in?, а таким же образом (например, if current_user.is? :guest).

Я думаю, мне нужно что-то создать, создавая объект current_user ib before_filters Application_Controller, но я не знаю, как правильно создать эту глобальную вещь.

Спасибо за любые ответы!


person Nimrodel    schedule 03.03.2011    source источник


Ответы (2)


Вы можете попробовать это так:

if current_user.try(:is?, :admin)

Так что не имеет значения, если current_user равен nil

person Wukerplank    schedule 03.03.2011
comment
Да, это хороший способ, может быть, я буду использовать его в следующих приложениях, но в текущей работе у меня уже так много проверок разрешений, и я надеюсь, что я найду, как НЕ изменить их все с помощью .try? - person Nimrodel; 03.03.2011

Если вы используете «CanCan», вы должны добавить функциональность, как вы упомянули, в свой класс способностей. Например:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    can :manage, :all if user.is? :admin
    can :read, :all if user.is? :guest
  end
end

Для получения дополнительной информации загляните в Wiki или посмотрите скриншот:

person Kevin Sylvestre    schedule 03.03.2011