Вопрос

Я пытаюсь дать некоторые пользовательские роли в специфических разрешениях SPREE. Не могу найти этот ответ в любом месте

ROLE_IALY.RB

class RoleAbility
 include CanCan::Ability

 def initialize(user)

 user || User.new # for guest

 if user.has_role? "admin"
   can :manage, :all
 elsif user.has_role? "retailer"
   can :manage, Product
 else
   can :read, :all
 end


 end
end
.

Я подумал, что это может быть популярной идеей, позволить пользователю роли «менеджер» управлять только продуктами и другими определенными моделями ...

Если я изменим

 elsif user.has_role? "retailer"
can :manage, Product
.

к

 elsif user.has_role? "retailer"
can :manage, :all
.

Это работает как ожидалось ... Я могу получить доступ к всей области администратора

Я хочу только «ритейлер», чтобы: управлять продуктами Tho !!;)

«admin» - это только роль, связанная с пользователем, то есть все роли - пользователи.

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

Есть какие-либо указатели ??

Это было полезно?

Решение

В Spree_auth_devise есть родной путь.Это не было задокументировано, но сейчас есть.

https://github.com/spree/spree_auth_devise Раздел: «Использование в приложении существующих рельсов"

Другие советы

Быстрое решение этой проблемы было бы добавить метод authorize_admin к администратору :: ProductsController Decorator.rb

Приложение / Контроллеры / admin_products_controller_decorator.rb

Admin::ProductsController.class_eval do
    def authorize_admin
        authorize! :admin, Product
        authorize! params[:action].to_sym, Product
    end
end
.

Примечание.P >.

Это означает, что роль должен иметь доступ к Admin, так и: действию для продукта .. IE:

App / Models / filleer_ibily.rb

class RetailerAbility
  include CanCan::Ability

  def initialize(user)
    user ||= User.new
    if user.has_role? "retailer"
      can :read, Product
      can :admin, Product
    end
  end
end
.

должен позволять ритейлерам читать продукты на админ.

Также не забудьте добавить это на инициализатор:

Конфигурация / инициализаторы / SPREE.RB

Ability.register_ability(RetailerAbility)
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top