【问题标题】:How can I block a user on my website from going to Rails_admin panel URL?如何阻止我网站上的用户访问 Rails_admin 面板 URL?
【发布时间】:2018-06-22 06:55:13
【问题描述】:

当用户尝试通过 URL 访问它时,如何阻止 Rails_admin 面板 URL 并将用户重定向到主页?我可以从 routes.rb 做到这一点吗?

我刚刚安装了 Rails_admin gem 并在 routes.rb 文件中添加了路由。 我可以在 routes.rb 文件中设置条件以不允许用户访问,而只能访问管理员吗? 这是我通往 Rails_admin 的路线 mount RailsAdmin::Engine => '/admin', as: 'rails_admin'

【问题讨论】:

    标签: ruby-on-rails rails-admin


    【解决方案1】:

    他们的docs describe这个用例:

    可以使用 authorize_with 方法添加授权。如果您传递一个块,它将通过 Rails Admin 中每个操作的 before_action 触发。

    RailsAdmin.config do |config|
      config.authorize_with do
        redirect_to main_app.root_path unless current_user.is_admin?
      end
    end
    

    这是在 config/initializers/rails_admin.rb

    中设置的

    进一步说明

    如文档中所述,这会在 每个 RailsAdmin 操作之前触发带有传递块的 before_action 调用。你可以想象成这样

    before_action :authorize_admin
    
    def authorize_admin
      redirect_to main_app.root_path unless current_user.is_admin?
    end
    

    这类似于将before_action 触发器添加到您的 ApplicationController - 只是它只会自动触发 RailsAdmin 操作。

    【讨论】:

    • 我会提出 404 错误而不是重定向,因为您正在向潜在的攻击者确认资源的存在。
    • Guillermo Siliceo Trueba,这是完全正确的。但是,即使用户没有登录,我们如何重定向这个 URL 呢?
    • 代码是taken from their docs - 请根据您的用例进行调整。 @JesseJames - 您可以在 if/unless 语句中添加 current_user.present?
    【解决方案2】:

    只需将此代码添加到您的 appication_controller.rb 文件中即可。

     RailsAdmin.config do |config|
      config.authorize_with do 
        if current_user.nil?
          redirect_to main_app.root_path
        else
          redirect_to main_app.root_path unless current_user.admin?
        end
      end
     end
    

    当用户未登录或用户为公共时,这将重定向页面。

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 2012-01-24
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2017-12-25
      相关资源
      最近更新 更多