Safest and Railsiest way in CanCan to do Guest, User, Admin permissions

Я относительно новичок в rails (3) и создаю приложение, используя CanCan, где есть 3 уровня пользователей.

  • Гость - незарегистрированный посетитель Пользователь
  • зарегистрирован и вошедший посетитель
  • Admin - зарегистрировался и вошел в систему посетитель с флагом администратора

Мои способности сейчас неуместны, скопированы из документации cancan, в основном определяя роль гостя и роль администратора

class Ability

    include CanCan::Ability

    def initialize(user)
        user ||= User.new # Guest user

        if user.is_admin?
            can :manage, :all
        else
            can :read, [Asana,Image,User,Video,Sequence]
        end
    end

end

Я хочу добавить в роль пользователя. Поскольку я создаю эту одноразовую пользовательскую модель, я подумал об использовании new_record? чтобы определить, вошел ли пользователь в систему или нет. Что-то вроде:

class Ability

    include CanCan::Ability

    def initialize(user)
        user ||= User.new # Guest user

        if !user.new_record? and user.is_admin?
            can :manage, :all
        elsif !user.new_record? and !user.is_admin?
            can {registered user-y permissions}
        else
            can :read, [Asana,Image,User,Video,Sequence]
        end
    end

end

Но это кажется неправильным. Кажется, что он отстранен от фактического входа в систему и беспокоится о том, действительно ли он безопасен.

Ищу совета по более элегантному способу сделать это.

Спасибо!

12
задан Edward M Smith 1 March 2011 в 17:50
поделиться