mirror of
https://github.com/discourse/discourse.git
synced 2025-05-29 11:48:08 +08:00
DEV: Add context in AdminConstraint
(#15838)
This allows plugins to override the permissions required to access specific things like the Logster and Sidekiq web UI without the changes leaking to the rest of Discourse routes.
This commit is contained in:
@ -32,8 +32,8 @@ Discourse::Application.routes.draw do
|
|||||||
mount Logster::Web => "/logs"
|
mount Logster::Web => "/logs"
|
||||||
else
|
else
|
||||||
# only allow sidekiq in master site
|
# only allow sidekiq in master site
|
||||||
mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint.new(require_master: true)
|
mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint.new(require_master: true, context: "sidekiq")
|
||||||
mount Logster::Web => "/logs", constraints: AdminConstraint.new
|
mount Logster::Web => "/logs", constraints: AdminConstraint.new(context: "logster")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -4,12 +4,16 @@ class AdminConstraint
|
|||||||
|
|
||||||
def initialize(options = {})
|
def initialize(options = {})
|
||||||
@require_master = options[:require_master]
|
@require_master = options[:require_master]
|
||||||
|
# @context isn't used here, but it exists to give plugins extra context
|
||||||
|
# about the destination of the request.
|
||||||
|
# possible values are: sidekiq, logster and app (default).
|
||||||
|
@context = options[:context] || "app"
|
||||||
end
|
end
|
||||||
|
|
||||||
def matches?(request)
|
def matches?(request)
|
||||||
return false if @require_master && RailsMultisite::ConnectionManagement.current_db != "default"
|
return false if @require_master && RailsMultisite::ConnectionManagement.current_db != "default"
|
||||||
current_user = CurrentUser.lookup_from_env(request.env)
|
@current_user = CurrentUser.lookup_from_env(request.env)
|
||||||
current_user&.admin? && custom_admin_check(request)
|
@current_user&.admin? && custom_admin_check(request)
|
||||||
rescue Discourse::InvalidAccess, Discourse::ReadOnly
|
rescue Discourse::InvalidAccess, Discourse::ReadOnly
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user