From 2b5fe8df5cd1420a48ededebc44fc09341d353da Mon Sep 17 00:00:00 2001 From: Rene Evertz Date: Tue, 25 Feb 2025 12:55:41 +0100 Subject: [PATCH] =?UTF-8?q?tenant=20nur=20=C3=BCber=20header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AdminMultitenancyContextInitializer.cs | 48 +++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/Service/ServiceBehavior/AdminMultitenancyContextInitializer.cs b/Service/ServiceBehavior/AdminMultitenancyContextInitializer.cs index e228ffe0a..943bef61a 100644 --- a/Service/ServiceBehavior/AdminMultitenancyContextInitializer.cs +++ b/Service/ServiceBehavior/AdminMultitenancyContextInitializer.cs @@ -31,26 +31,56 @@ namespace BeWo.Service.ServiceBehavior { string lTenant = null; + // Hole Interface + string lInterface = null; + var segments = pChannel.LocalAddress.Uri.Segments; + for (int i = 0; i < segments.Length; i++) + { + var seg = segments[i].Trim('/'); + + if (seg.EndsWith(".svc")) + { + lInterface = seg.Substring(0, seg.Length - 4); + } + } + + if (string.IsNullOrWhiteSpace(lInterface)) + { + throw new ArgumentException($"Zugriff verweigert. Interface unbekannt"); + } + + + // Hole Methode + string lMethod = pMessage.Properties[WebHttpDispatchOperationSelector.HttpOperationNamePropertyName] as string; + if (string.IsNullOrWhiteSpace(lMethod)) + { + throw new ArgumentException($"Zugriff verweigert. Methode unbekannt"); + } + + // RequireNoTenant - var lTemp = ServiceHelper.GetCustomAttribute(pChannel.LocalAddress.Uri, pMessage.Headers.To); + var lTemp = ServiceHelper.GetCustomAttribute(lInterface, lMethod); if (lTemp is object) { return null; } - //// Hole tenant aus Query - if (pMessage.Properties?.Via is Uri uri) - { - var query = HttpUtility.ParseQueryString(uri.Query); - var tenant = query["tenant"]; + // Hole tenant aus Query + // Wird erstmal nicht benötigt. Per Header besser + // Ungefähr auf einem Level wie Username + //if (pMessage.Properties?.Via is Uri uri) + //{ + // var query = HttpUtility.ParseQueryString(uri.Query); + // var tenant = query["tenant"]; - lTenant = tenant; - } + // lTenant = tenant; + //} // Hole tenant aus Header if (string.IsNullOrWhiteSpace(lTenant)) { - + var prop = (HttpRequestMessageProperty)pMessage.Properties[HttpRequestMessageProperty.Name]; + lTenant = prop?.Headers["tenant"]; } // Wenn kein Tenant gefunden wird,