55 return {
false, std::move(
reason)};
58 explicit operator bool()
const {
return allowed; }
77 std::uint32_t action_mask)
const;
89 std::uint32_t action_mask)
90 -> kcenon::common::VoidResult;
108 std::string_view ae_title,
const std::string &session_id)
const;
112 [[nodiscard]]
const std::vector<Permission> &
116 void set_storage(std::shared_ptr<security_storage_interface> storage);
127 -> kcenon::common::VoidResult;
129 -> kcenon::common::VoidResult;
130 [[nodiscard]]
auto get_user(std::string_view
id)
139 -> std::optional<User>;
143 std::shared_ptr<security_storage_interface>
storage_;
153 static std::pair<ResourceType, std::uint32_t>
Manages permissions and access checks.
void unregister_ae_title(std::string_view ae_title)
auto get_user_by_ae_title(std::string_view ae_title) -> std::optional< User >
Get user by AE Title.
auto create_user(const User &user) -> kcenon::common::VoidResult
bool has_role(const User &user, Role role) const
bool check_permission(const User &user, ResourceType resource, std::uint32_t action_mask) const
static std::pair< ResourceType, std::uint32_t > map_dicom_operation(DicomOperation op)
Map DICOM operation to resource type and action.
AccessCheckResult check_dicom_operation(const user_context &ctx, DicomOperation op) const
Check if a DICOM operation is allowed.
void set_role_permissions(Role role, std::vector< Permission > permissions)
std::map< Role, std::vector< Permission > > role_permissions_
auto get_user(std::string_view id) -> kcenon::common::Result< User >
void register_ae_title(std::string_view ae_title, std::string_view user_id)
void initialize_default_permissions()
void set_storage(std::shared_ptr< security_storage_interface > storage)
auto validate_access(const user_context &ctx, ResourceType resource, std::uint32_t action_mask) -> kcenon::common::VoidResult
Validate access for a user context.
const std::vector< Permission > & get_role_permissions(Role role) const
std::shared_ptr< security_storage_interface > storage_
void set_audit_callback(AccessAuditCallback callback)
std::map< std::string, std::string > ae_to_user_id_
auto assign_role(std::string_view user_id, Role role) -> kcenon::common::VoidResult
std::optional< user_context > get_context_for_ae(std::string_view ae_title, const std::string &session_id) const
Get user context for an AE Title.
AccessAuditCallback audit_callback_
Represents the security context for a user session.
Role
User roles in the PACS system.
std::function< void(const user_context &ctx, DicomOperation op, const AccessCheckResult &result)> AccessAuditCallback
Callback for audit logging of access attempts.
ResourceType
Categories of resources requiring protection.
DicomOperation
DICOM operation types for permission checking.
@ NEventReport
N-EVENT-REPORT.
@ CMove
C-MOVE (retrieve/move)
@ CStore
C-STORE (storage)
@ CEcho
C-ECHO (verification)
Permission definitions for RBAC.
Storage interface for RBAC persistence.
Result of an access check.
static AccessCheckResult allow()
static AccessCheckResult deny(std::string reason)
Represents a user in the system.
User definition for RBAC.
User context for session-based access control.