Como ocultar o caminho do ActiveAdmin

Vou assumir que você já instalou o devise em seu aplicativo Rails. Também vamos supor que você já esteja usando sua rota / admin. E vamos supor que você protegeu sua rota administrativa possivelmente com um código como este:

app/controllers/admin_controller.rb

class AdminController < ApplicationController
before_filter
:require_permission
private
def require_permission
if not current_user.try(:admin?)
redirect_to root_path

end
end
end

ou em seu arquivo de rotas

config/routes.rb

authenticated :user, lambda {|u| u.admin } do
get 'admin', to: 'admin#index'
end

mas talvez você só queira vincular ao ActiveAdmin a partir da página inicial de um usuário, se ele for um administrador. Você pode simplesmente entrar em sua visão:

<% if current_user.admin? %>
<%= link_to "ActiveAdmin", "/your_active_admin_url" %>
<% end %>

mas então qualquer um pode entrar yourwebsite.com/your_active_admin_urlse conhecer o diretório (presumindo que as outras medidas de segurança não estejam em vigor). Então vamos subir a paranóia e fazer o diretório mudar aleatoriamente a cada reinicialização do Rails

Primeiro, vamos editar nosso arquivo inicializador ActiveAdmin.

config/initializers/active_admin.rb

require 'securerandom'
ActiveAdmin.setup do |config|
config
.default_namespace = SecureRandom.base64( 24
).gsub( /[+/=]/, ""
).prepend( "aa"
).downcase
end

e vamos torná-lo um subdiretório sob administração. Portanto, em nosso arquivo de rotas:

config/routes.rb

scope :admin do
devise_for
:admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
end

Agora, como o namespace é aleatório, ele se parecerá com isso e mudará toda vez que o Rails for reiniciado./admin/aanoh3viemwxppom9sxgfpdhv99c01gsf/dashboard

Você pode estar pensando … bem, isso é legal e tudo, mas como vou saber como chegar à página ActiveAdmin em um servidor onde não vejo as rotas? Não consigo adivinhar …

Agora é aqui que você precisará de um ajudante de caminho de url para atualizar seus links sempre que o caminho mudar. Então, vamos criar um método auxiliar. Cole isso em seu arquivo:

app/helpers/application_helper.rb

module ApplicationHelper

def active_admin
ObjectSpace.each_object(
ActiveAdmin::Resource::Routes
).first.namespace.name
end

end

e agora, toda vez que você quiser usar os ajudantes de caminho integrados do Rail, você os adicionará com uma avaliação disso. Por exemplo:

eval("#{active_admin}_dashboard_path")

Agora você pode alterar o link na página de usuários administradores para este:

<% if current_user.admin? %>
<%= link_to "ActiveAdmin", eval("#{active_admin}_dashboard_path") %>
<% end %>

E você conseguiu! Caminho de pasta aleatório para ActiveAdmin alcançado! Portanto, para os paranóicos, sinta-se à vontade para incorporar TODOS os métodos acima para a segurança do administrador. E certifique-se de que funcionam antes de você se bloquear 😉

É claro que o elo mais fraco em segurança são as pessoas. Todos a quem você concede privilégios de administrador são um risco de segurança adicional. Porque as pessoas geralmente são suscetíveis à engenharia social. Portanto, certifique-se de que todos os administradores sejam informados sobre isso para ajudar a manter a integridade do seu sistema.

Deus abençoe! Codifique, comente, compartilhe!
-Daniel P. Clark