There are many possible ways to implement this feature: * Adding a custom middleware * Using rack-attack with a blocklist * Using routes constraints We're choosing to use a controller concern with a redirect because it's what we do to handle unauthorized cancancan exceptions.
18 lines
315 B
Ruby
18 lines
315 B
Ruby
module IpDeniedHandler
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
before_action :restrict_ip, unless: :allowed_ip?
|
|
end
|
|
|
|
private
|
|
|
|
def restrict_ip
|
|
redirect_to root_path, alert: t("ip_denied_handler.unauthorized")
|
|
end
|
|
|
|
def allowed_ip?
|
|
RestrictAdminIps.new(request.remote_ip).allowed?
|
|
end
|
|
end
|