Как защитить контроллер в расширении Spree, чтобы только администратор магазина мог получить к нему доступ?
Я пытаюсь разработать ценовое предложение для Spree, позволяющее клиентам загружать файлы в AWS S3.
Я хотел бы "обезопасить" с помощью аутентификации некоторые из своих действий, и Spree предоставляет полезные помощники для этой цели, однако мне не удалось заставить его работать. Насколько я понял, я должен добавить эту строку в QuotesController. include Spree::Core::ControllerHelpers::Auth
в моем контроллере, как показано в этой сущности
К сожалению, я все еще получаю неопределенную ошибку метода authenticate_user!
Ради сохранения этой темы СУХОЙ, вы можете найти больше на мой вопрос по проблеме репозитория Spree #5794
Любой вклад очень приветствуется. Спасибо.
1 ответ
Поэтому я мог бы удалить вопрос, поскольку он основывался на неправильных предположениях, но я скорее подробно опишу, как мне удалось решить аутентификацию QuotesController.
Большое спасибо @Hates_ и всем людям в IRC Spree за их ответы!
Первое неверное предположение касалось конструкции контроллера QuotesController, который должен быть разделен на две части: одна для покупателей, другая для бэкенда администратора магазина. Второе неверное предположение заключалось в том, что include Spree::Core::ControllerHelpers::Auth
не собирался дать мне защиту, которую я хотел. Итак, вот что я закончил:
Сторона администратора
В Spree, чтобы ваш контроллер пользовался "защитой" администратора магазина, этот контроллер должен наследовать так Spree::Admin::QuotesController < Spree::Admin::BaseController
, Этот контроллер будет жить в app/controllers/spree/admin/quotes_controller.rb
, Это все, что вам нужно, чтобы "защитить" его. Кроме того, это сделает ваши взгляды хорошо интегрированными в бэкэнд магазина.
Сторона клиента
По замыслу лучше создать другой контроллер QuotesController, использующий другое пространство имен. app/controllers/spree/quotes_controller.rb
и наследовать так:
Spree::QuotesController < Spree:Core::BaseController