Repository URL to install this package:
Version:
2.1.0 ▾
|
# frozen_string_literal: true
module Sinatra
module Impersonate
# Delegator to an RBAC::User class
class Impersonator < SimpleDelegator
attr_reader :actual_user
def initialize(session)
@session = session
@actual_user = RBAC.user(@session[:username])
@valid_targets = []
super(@actual_user)
end
def valid_targets(valid_targets)
@valid_targets = valid_targets
if impersonating? && can_impersonate?(impersonating)
__setobj__ RBAC.user(impersonating)
else
stop_impersonating
end
end
def impersonating?
return false if @valid_targets.empty?
@session.key? :impersonating
end
def impersonating
@session[:impersonating] if impersonating?
end
def impersonate(username)
@session[:impersonating] = username if can_impersonate?(username)
end
def can_impersonate?(username = nil)
has_permission = @actual_user.allowed_to? Sinatra::Impersonate.configuration.permission
return has_permission if username.nil? || !has_permission
@valid_targets.include? username
end
def stop_impersonating
@session.delete(:impersonating)
end
end
end
end