mirror of
https://github.com/discourse/discourse.git
synced 2024-11-26 13:03:39 +08:00
492226a973
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.
28 lines
830 B
Ruby
28 lines
830 B
Ruby
# frozen_string_literal: true
|
|
|
|
class AdminConstraint
|
|
|
|
def initialize(options = {})
|
|
@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
|
|
|
|
def matches?(request)
|
|
return false if @require_master && RailsMultisite::ConnectionManagement.current_db != "default"
|
|
@current_user = CurrentUser.lookup_from_env(request.env)
|
|
@current_user&.admin? && custom_admin_check(request)
|
|
rescue Discourse::InvalidAccess, Discourse::ReadOnly
|
|
false
|
|
end
|
|
|
|
# Extensibility point: plugins can overwrite this to add additional checks
|
|
# if they require.
|
|
def custom_admin_check(request)
|
|
true
|
|
end
|
|
|
|
end
|