From 9f7a0c86250354ae515acc8e5a9ac5457fddaf63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20K=C3=BChl?= Date: Fri, 18 Jul 2025 13:32:29 +0200 Subject: [PATCH] completed schema layout --- demo/work/admin/LdapGroupSchemaSettings.hpp | 3 +++ demo/work/admin/LdapImportSettings.hpp | 3 +++ demo/work/admin/LdapUserDirectory.hpp | 15 ++++++++++++++- demo/work/admin/LdapUserSchemaSettings.hpp | 14 +++++++++----- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/demo/work/admin/LdapGroupSchemaSettings.hpp b/demo/work/admin/LdapGroupSchemaSettings.hpp index 69be7ce..f943ad6 100644 --- a/demo/work/admin/LdapGroupSchemaSettings.hpp +++ b/demo/work/admin/LdapGroupSchemaSettings.hpp @@ -6,15 +6,18 @@ #include "matador/utils/base_class.hpp" namespace work::models::admin { +struct LdapUserDirectory; struct LdapGroupSchemaSettings : core::Model { std::string group_object_filter; std::string user_member_attribute; + matador::object::object_ptr ldap_user_directory; template void process( Operator& op ) { namespace field = matador::access; field::process( op, *matador::base_class( this ) ); + field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::default_foreign_attributes); field::attribute( op, "group_object_filter", group_object_filter, 511 ); field::attribute( op, "user_member_attribute", user_member_attribute, 511 ); } diff --git a/demo/work/admin/LdapImportSettings.hpp b/demo/work/admin/LdapImportSettings.hpp index 27ce4dc..dcf5c34 100644 --- a/demo/work/admin/LdapImportSettings.hpp +++ b/demo/work/admin/LdapImportSettings.hpp @@ -6,16 +6,19 @@ #include "matador/utils/base_class.hpp" namespace work::models::admin { +struct LdapUserDirectory; struct LdapImportSettings : core::Model { std::string default_role; unsigned int sync_interval; unsigned int network_timeout; + matador::object::object_ptr ldap_user_directory; template void process( Operator& op ) { namespace field = matador::access; field::process( op, *matador::base_class( this ) ); + field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::default_foreign_attributes); field::attribute( op, "default_role", default_role, 511 ); field::attribute( op, "sync_interval", sync_interval ); field::attribute( op, "network_timeout", network_timeout ); diff --git a/demo/work/admin/LdapUserDirectory.hpp b/demo/work/admin/LdapUserDirectory.hpp index 7f42fc7..18994dc 100644 --- a/demo/work/admin/LdapUserDirectory.hpp +++ b/demo/work/admin/LdapUserDirectory.hpp @@ -1,6 +1,9 @@ #ifndef LDAP_USER_DIRECTORY_HPP #define LDAP_USER_DIRECTORY_HPP +#include "LdapUserSchemaSettings.hpp" +#include "LdapGroupSchemaSettings.hpp" +#include "LdapImportSettings.hpp" #include "UserDirectory.hpp" #include "matador/object/collection.hpp" @@ -13,14 +16,24 @@ struct LdapUserDirectory : UserDirectory { std::string schema_base_dn; std::string additional_user_base_dn; std::string additional_group_base_dn; + matador::object::object_ptr user_schema_settings; + matador::object::object_ptr group_schema_settings; + matador::object::object_ptr import_settings; matador::object::collection users; matador::object::collection groups; - template void process( Operator& op ) { namespace field = matador::access; field::process( op, *matador::base_class( this ) ); + field::attribute( op, "schema_base_dn", schema_base_dn, 511 ); + field::attribute( op, "additional_user_base_dn", additional_user_base_dn, 511 ); + field::attribute( op, "additional_group_base_dn", additional_group_base_dn, 511 ); + field::belongs_to( op, "user_schema_settings", user_schema_settings, matador::utils::default_foreign_attributes ); + field::belongs_to( op, "group_schema_settings", group_schema_settings, matador::utils::default_foreign_attributes ); + field::belongs_to( op, "import_settings", import_settings, matador::utils::default_foreign_attributes ); + field::has_many( op, "ldap_users", users, "users_id", matador::utils::default_foreign_attributes ); + field::has_many( op, "ldap_groups", groups, "groups_id", matador::utils::default_foreign_attributes ); } }; } diff --git a/demo/work/admin/LdapUserSchemaSettings.hpp b/demo/work/admin/LdapUserSchemaSettings.hpp index 79b141a..6e308da 100644 --- a/demo/work/admin/LdapUserSchemaSettings.hpp +++ b/demo/work/admin/LdapUserSchemaSettings.hpp @@ -5,22 +5,26 @@ #include "matador/utils/base_class.hpp" + namespace work::models::admin { +struct LdapUserDirectory; struct LdapUserSchemaSettings : core::Model { std::string user_object_filter; std::string user_unique_id_attribute; std::string user_member_of_attribute; std::string user_name_attribute; + matador::object::object_ptr ldap_user_directory; template void process( Operator& op ) { namespace field = matador::access; - field::process( op, *matador::base_class( this ) ); - field::attribute( op, "user_object_filter", user_object_filter, 511 ); - field::attribute( op, "user_unique_id_attribute", user_unique_id_attribute, 511 ); - field::attribute( op, "user_member_of_attribute", user_member_of_attribute, 511 ); - field::attribute( op, "user_name_attribute", user_name_attribute, 511 ); + field::process(op, *matador::base_class( this )); + field::has_one(op, "ldap_user_directory", ldap_user_directory, matador::utils::default_foreign_attributes); + field::attribute(op, "user_object_filter", user_object_filter, 511); + field::attribute(op, "user_unique_id_attribute", user_unique_id_attribute, 511); + field::attribute(op, "user_member_of_attribute", user_member_of_attribute, 511); + field::attribute(op, "user_name_attribute", user_name_attribute, 511); } };