@weare138

Как использовать в канкане несколько ролей?

Привет, ребят.Такой вопрос: хочу использовать три роли в приложении админ, модер и клиент.Админ может все, модер тереть комменты и посты, а клиент создавать посты, читать и редактировать свои комменты.Использовал cancancan, вот класс ability
class Ability
  include CanCan::Ability

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

    if user.admin?
      can :manage, :all
    elsif user.moderator?
      can :manage, Post, Comment
    elsif user.client?
      can :create, Post
      can [:update, :destroy], Comment, user_id: user.id
    else
      can :read, :all
    end
  end
end


Все вроде работает, кроме того, что у гостя все еще осталась возможность создавать посты.Как исправить?
  • Вопрос задан
  • 2322 просмотра
Пригласить эксперта
Ответы на вопрос 3
1kachan
@1kachan
тестовое задание на MLSDev?
Ответ написан
@DrunkenMaster
Очевидно, явно обрабатывать эту ситуацию:

class Ability
  include CanCan::Ability

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

    if user.persisted?
      if user.admin?
        can :manage, :all
      elsif user.moderator?
        can :manage, Post, Comment
      elsif user.client?
        can :create, Post
        can [:update, :destroy], Comment, user_id: user.id
      end
    end

    can :read, :all
  end
end


либо не делать user ||= User.new, тогда unless user.nil?
Ответ написан
@fuCtor
Ruby разработчик
Попробуйте явно запретить:
class Ability
  include CanCan::Ability

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

    if user.admin?
      can :manage, :all
    elsif user.moderator?
      can :manage, Post, Comment
    elsif user.client?
      can :create, Post
      can [:update, :destroy], Comment, user_id: user.id
    else
      cannot :create, Post
      can :read, :all
    end
  end
end
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы