Spree пользовательские роли разрешений
Вопрос
Я пытаюсь дать некоторые пользовательские роли в специфических разрешениях 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
.
Это означает, что роль должен иметь доступ к 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)