#pragma once #include #include #include namespace Poco { namespace Net { class IPAddress; } namespace Util { class AbstractConfiguration; } } namespace DB { class ContextAccess; struct User; using UserPtr = std::shared_ptr; class EnabledRoles; class RoleCache; class EnabledRowPolicies; class RowPolicyCache; class EnabledQuota; class QuotaCache; struct QuotaUsageInfo; struct SettingsProfile; using SettingsProfilePtr = std::shared_ptr; class EnabledSettings; class SettingsProfilesCache; class SettingsProfileElements; class ClientInfo; struct Settings; /// Manages access control entities. class AccessControlManager : public MultipleAccessStorage { public: AccessControlManager(); ~AccessControlManager(); void setLocalDirectory(const String & directory); void setUsersConfig(const Poco::Util::AbstractConfiguration & users_config); void setDefaultProfileName(const String & default_profile_name); std::shared_ptr getContextAccess( const UUID & user_id, const std::vector & current_roles, bool use_default_roles, const Settings & settings, const String & current_database, const ClientInfo & client_info) const; std::shared_ptr getEnabledRoles( const std::vector & current_roles, const std::vector & current_roles_with_admin_option) const; std::shared_ptr getEnabledRowPolicies( const UUID & user_id, const std::vector & enabled_roles) const; std::shared_ptr getEnabledQuota( const UUID & user_id, const String & user_name, const std::vector & enabled_roles, const Poco::Net::IPAddress & address, const String & custom_quota_key) const; std::vector getQuotaUsageInfo() const; std::shared_ptr getEnabledSettings(const UUID & user_id, const SettingsProfileElements & settings_from_user, const std::vector & enabled_roles, const SettingsProfileElements & settings_from_enabled_roles) const; std::shared_ptr getProfileSettings(const String & profile_name) const; private: class ContextAccessCache; std::unique_ptr context_access_cache; std::unique_ptr role_cache; std::unique_ptr row_policy_cache; std::unique_ptr quota_cache; std::unique_ptr settings_profiles_cache; }; }