tenant nur über header

This commit is contained in:
2025-02-25 12:55:41 +01:00
parent c41537b56f
commit 2b5fe8df5c

View File

@@ -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<RequireNoTenantAttribute>(pChannel.LocalAddress.Uri, pMessage.Headers.To);
var lTemp = ServiceHelper.GetCustomAttribute<RequireNoTenantAttribute>(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,