保护letter_opener

时间:2015-07-30 16:34:08

标签: ruby-on-rails controller

好吧,我实际上是使用letter_opener_web来预览我即将发送的电子邮件。明白,我不是在开发人员方面(letter_opener最初是为了开发环境),而是在我网站的用户一边。我使用letter_opener作为生产组件。

我需要访问letter_opener视图,但是letter_opener的默认实现是在routes.rb中完成的

mount LetterOpenerWeb::Engine, at: "/letter_opener"

我现在使用了一种生成随机路径的技巧,只在我渲染的Web视图中传递URL,但是,这很糟糕:D

if Rails.env.development?
  mount LetterOpenerWeb::Engine, at: "/letter_opener"
else
  mount LetterOpenerWeb::Engine, at: "/#{SecureRandom.hex(12)}"
end

有没有办法可以覆盖某些控制器来添加我自己的访问控制实现?我当前的访问控制(我不会改变)是这样完成的

class ApplicationController
  before_action :access_denied
end

class SomeController < ApplicationController
  prepend_before_action :allow_access_to_xxxx
end

这就是为什么我需要一些方法来覆盖letter_opener的控制器,同时仍然使其视图可用(如果可能的话,通过保持简单的语法添加到路由中!)

编辑:我的用户案例。只需要几行代码即可预览而不是发送电子邮件

   ...
    mail(
      to: dst,
      from: message[:from],
      subject: @subject_full,
      delivery_method: real_or_preview(message))
    ...

# Switch delivery method to letter_opener if preview
    def real_or_preview(message)
      if message[:preview]
        :letter_opener
      else
        ActionMailer::Base.delivery_method
      end
    end

0 个答案:

没有答案