20#ifndef ORES_ACCOUNTS_SERVICE_AUTHORIZATION_SERVICE_HPP
21#define ORES_ACCOUNTS_SERVICE_AUTHORIZATION_SERVICE_HPP
26#include <boost/uuid/uuid.hpp>
27#include "ores.utility/log/make_logger.hpp"
28#include "ores.utility/uuid/uuid_v7_generator.hpp"
29#include "ores.database/domain/context.hpp"
30#include "ores.accounts/domain/role.hpp"
31#include "ores.accounts/domain/permission.hpp"
32#include "ores.accounts/domain/account_role.hpp"
33#include "ores.accounts/repository/role_repository.hpp"
34#include "ores.accounts/repository/permission_repository.hpp"
35#include "ores.accounts/repository/account_role_repository.hpp"
36#include "ores.accounts/repository/role_permission_repository.hpp"
37#include "ores.eventing/service/event_bus.hpp"
39namespace ores::accounts::service {
56 inline static std::string_view logger_name =
57 "ores.accounts.service.authorization_service";
59 [[nodiscard]]
static auto& lg() {
61 static auto instance = make_logger(logger_name);
90 std::optional<domain::permission>
101 const std::string& description);
115 std::optional<domain::role>
find_role(
const boost::uuids::uuid& role_id);
132 const std::string& description,
133 const std::vector<std::string>& permission_codes,
134 const std::string& recorded_by);
139 std::vector<std::string>
156 void assign_role(
const boost::uuids::uuid& account_id,
157 const boost::uuids::uuid& role_id,
158 const std::string& assigned_by);
169 void revoke_role(
const boost::uuids::uuid& account_id,
170 const boost::uuids::uuid& role_id);
175 std::vector<domain::role>
190 std::vector<std::string>
203 const std::string& permission_code);
215 const std::string& required_permission);
221 void publish_permissions_changed(
const boost::uuids::uuid& account_id);
Implements logging for ORE Studio.
Definition lifecycle_manager.hpp:30
Represents an atomic permission that can be granted to roles.
Definition permission.hpp:35
Represents a named collection of permissions that can be assigned to accounts.
Definition role.hpp:38
Reads and writes account-role assignments to data storage.
Definition account_role_repository.hpp:37
Reads and writes permissions to data storage.
Definition permission_repository.hpp:36
Reads and writes role-permission assignments to data storage.
Definition role_permission_repository.hpp:37
Reads and writes roles to data storage.
Definition role_repository.hpp:36
Service for managing role-based access control (RBAC).
Definition authorization_service.hpp:54
std::vector< std::string > get_effective_permissions(const boost::uuids::uuid &account_id)
Computes the effective permissions for an account.
Definition authorization_service.cpp:294
std::optional< domain::role > find_role(const boost::uuids::uuid &role_id)
Finds a role by its ID.
Definition authorization_service.cpp:114
std::optional< domain::permission > find_permission_by_code(const std::string &code)
Finds a permission by its code.
Definition authorization_service.cpp:54
std::optional< domain::role > find_role_by_name(const std::string &name)
Finds a role by its name.
Definition authorization_service.cpp:126
std::vector< domain::permission > list_permissions()
Lists all permissions in the system.
Definition authorization_service.cpp:48
domain::permission create_permission(const std::string &code, const std::string &description)
Creates a new permission.
Definition authorization_service.cpp:63
void assign_role(const boost::uuids::uuid &account_id, const boost::uuids::uuid &role_id, const std::string &assigned_by)
Assigns a role to an account.
Definition authorization_service.cpp:213
domain::role create_role(const std::string &name, const std::string &description, const std::vector< std::string > &permission_codes, const std::string &recorded_by)
Creates a new role with the specified permissions.
Definition authorization_service.cpp:137
std::vector< domain::role > get_account_roles(const boost::uuids::uuid &account_id)
Gets all roles assigned to an account.
Definition authorization_service.cpp:282
std::vector< domain::role > list_roles()
Lists all roles in the system.
Definition authorization_service.cpp:95
bool has_permission(const boost::uuids::uuid &account_id, const std::string &permission_code)
Checks if an account has a specific permission.
Definition authorization_service.cpp:307
void revoke_role(const boost::uuids::uuid &account_id, const boost::uuids::uuid &role_id)
Revokes a role from an account.
Definition authorization_service.cpp:258
static bool check_permission(const std::vector< std::string > &permissions, const std::string &required_permission)
Checks if the given permissions list satisfies a permission check.
Definition authorization_service.cpp:314
std::vector< std::string > get_role_permissions(const boost::uuids::uuid &role_id)
Gets the permission codes assigned to a role.
Definition authorization_service.cpp:192
Context for the operations on a postgres database.
Definition context.hpp:30
A typed, thread-safe, in-process publish/subscribe event bus.
Definition event_bus.hpp:119
A generator for UUID version 7 (v7) based on RFC 9562.
Definition uuid_v7_generator.hpp:50