#pragma once #include #include #include #include #include namespace DB { class AccessControlManager; struct Role; using RolePtr = std::shared_ptr; class RoleCache { public: RoleCache(const AccessControlManager & manager_); ~RoleCache(); std::shared_ptr getEnabledRoles( const boost::container::flat_set & current_roles, const boost::container::flat_set & current_roles_with_admin_option); private: void collectEnabledRoles(); void collectEnabledRoles(EnabledRoles & enabled); RolePtr getRole(const UUID & role_id); void roleChanged(const UUID & role_id, const RolePtr & changed_role); void roleRemoved(const UUID & role_id); const AccessControlManager & manager; Poco::ExpireCache> cache; std::map> enabled_roles; mutable std::mutex mutex; }; }