如何在Spree扩展中保护控制器,以便只有商店的管理员才能访问它?

时间:2014-12-17 15:08:23

标签: ruby ruby-on-rails-4 spree spree-auth-devise

我正在尝试为Spree开发Quote Extention,允许客户将文件上传到AWS S3。

我想"安全"通过身份验证它的一些操作和Spree为此提供了有用的帮助,但是我无法设法让它工作。 据我所知,我必须在QuotesController中添加这一行。 include Spree::Core::ControllerHelpers::Auth 在我的控制器中,如gist

所示

不幸的是,我仍然得到未定义的方法错误authenticate_user!

为了保持此主题干,您可以在Spree's repository issue #5794

上找到有关我的问题的更多信息。

非常欢迎任何贡献。 谢谢。

1 个答案:

答案 0 :(得分:0)

所以我可以删除这个问题,因为它是基于错误的假设,但我更详细地说明了我如何设法解决QuotesController的身份验证。

非常感谢@Hates_和Spree IRC的所有人提供的答案!

第一个错误的假设是关于QuotesController的设计,它应该分为两部分,一部分供客户使用,一部分用于商店管理员后端。第二个错误的假设是include Spree::Core::ControllerHelpers::Auth不会给我我想要的保护。所以这就是我最终的结果:

管理员端

在Spree中,为了让您的控制器享受商店管理员的“保护”,此控制器必须继承Spree::Admin::QuotesController < Spree::Admin::BaseController。该控制器将存在app/controllers/spree/admin/quotes_controller.rb。这就是“保护”它所需要的一切。此外,它将使您的视图很好地融入商店的后端。

客户方

在设计上,最好使用不同的命名空间app/controllers/spree/quotes_controller.rb制作另一个QuotesController并继承如下:

Spree::QuotesController < Spree:Core::BaseController