#pragma once #include #include #include #include namespace visione::auth { struct UserContext { long long id{0}; std::string email; std::string role; std::vector roles; std::vector permissions; bool mustChangePassword{false}; }; std::optional bearerToken(const drogon::HttpRequestPtr &request); std::optional authenticate(const drogon::HttpRequestPtr &request); bool hasRole(const UserContext &user, const std::string &role); bool hasPermission(const UserContext &user, const std::string &permission); bool canManageReports(const UserContext &user); bool isAdmin(const UserContext &user); bool mustChangePassword(const UserContext &user); } // namespace visione::auth