【问题标题】:Filters/Callbacks should be in concerns or not过滤器/回调是否值得关注
【发布时间】:2021-05-23 12:46:56
【问题描述】:

假设我对控制器有疑问,它的名称是身份验证。它包含一个 before_action 方法 authenticate_user。我应该在哪里写 before_action :authenticate_user? 最佳做法是什么?是否应该写在关注点或包含此关注点的控制器中?

注意:我想实现单一职责

【问题讨论】:

    标签: ruby-on-rails actioncontroller activesupport-concern


    【解决方案1】:

    这取决于您的控制器结构。 Auth 逻辑通常放置在大多数其他控制器最终继承自的更高级别控制器中,而不是关注点。这是因为您可以简单地在更高级别启用身份验证并使其在所有子控制器上处于活动状态,而无需为每个子控制器显式添加关注点,这可能更容易出错。该更高级别的控制器将包含before_actionauthenticate_user 方法。如果出于任何原因,沿途有一个控制器需要禁用身份验证,假设这是一个例外,您可以使用skip_before_action

    class UserController < ApplicationController
        before_action :authenticate
    
        private
    
        def authenticate
            # ...
        end
    end
    
    class SomeController < UserController
        # auth already enabled here
    end
    

    【讨论】:

    • 如果我们在应用程序控制器等高级控制器中包含该关注点会怎样?我想实现单一责任原则。
    • 如果将逻辑排除在 ApplicationController 之外就可以让它更简洁、更易于理解。
    猜你喜欢
    • 2012-06-11
    • 2017-08-29
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多