184 lines
7.2 KiB
C#
184 lines
7.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security.Claims;
|
|
|
|
namespace gehGassi.Web.Auth
|
|
{
|
|
/// <summary>
|
|
/// Erweiterungen für ClaimsPrincipal
|
|
/// </summary>
|
|
public static class UserExtensions
|
|
{
|
|
#region Customer
|
|
|
|
/// <summary>
|
|
/// Gibt die Id des zugeordneten Kunden zurück
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal</param>
|
|
/// <returns>Id des Kunden oder null wenn nicht zugeordnet</returns>
|
|
public static long? CustomerId(this ClaimsPrincipal user)
|
|
{
|
|
var selectedCustomerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedCustomerIdClaimType);
|
|
if (selectedCustomerClaim != null && !string.IsNullOrWhiteSpace(selectedCustomerClaim.Value))
|
|
{
|
|
return long.Parse(selectedCustomerClaim.Value);
|
|
}
|
|
|
|
var customerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.CustomerIdClaimType);
|
|
if (customerClaim != null && !string.IsNullOrWhiteSpace(customerClaim.Value))
|
|
{
|
|
return long.Parse(customerClaim.Value);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt die UniqueId des zugeordneten Kunden zurück
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal</param>
|
|
/// <returns>Id des Kunden oder null wenn nicht zugeordnet</returns>
|
|
public static Guid? CustomerUniqueId(this ClaimsPrincipal user)
|
|
{
|
|
var selectedCustomerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedCustomerUniqueIdClaimType);
|
|
if (selectedCustomerClaim != null && !string.IsNullOrWhiteSpace(selectedCustomerClaim.Value))
|
|
{
|
|
return Guid.Parse(selectedCustomerClaim.Value);
|
|
}
|
|
|
|
var customerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.CustomerUniqueIdClaimType);
|
|
if (customerClaim != null && !string.IsNullOrWhiteSpace(customerClaim.Value))
|
|
{
|
|
return Guid.Parse(customerClaim.Value);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt den Namen des zugeordneten Kunden zurück
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal</param>
|
|
/// <returns>Name des Kunden</returns>
|
|
public static string CustomerName(this ClaimsPrincipal user)
|
|
{
|
|
var selectedCustomerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedCustomerNameClaimType);
|
|
if (selectedCustomerClaim != null && !string.IsNullOrWhiteSpace(selectedCustomerClaim.Value))
|
|
{
|
|
return selectedCustomerClaim.Value;
|
|
}
|
|
|
|
var customerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.CustomerNameClaimType);
|
|
if (customerClaim != null && !string.IsNullOrWhiteSpace(customerClaim.Value))
|
|
{
|
|
return customerClaim.Value;
|
|
}
|
|
return string.Empty;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region App-User
|
|
|
|
/// <summary>
|
|
/// Gibt die Id des zugeordneten App-Users zurück
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal</param>
|
|
/// <returns>Id des App-Users oder null wenn nicht zugeordnet</returns>
|
|
public static string AppUserId(this ClaimsPrincipal user)
|
|
{
|
|
var selectedAppUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedAppUserIdClaimType);
|
|
if (selectedAppUserClaim != null && !string.IsNullOrWhiteSpace(selectedAppUserClaim.Value))
|
|
{
|
|
return selectedAppUserClaim.Value;
|
|
}
|
|
|
|
var appUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.AppUserIdClaimType);
|
|
if (appUserClaim != null && !string.IsNullOrWhiteSpace(appUserClaim.Value))
|
|
{
|
|
return appUserClaim.Value;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gibt den Namen des zugeordneten App-Users zurück
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal</param>
|
|
/// <returns>Name des App-Users</returns>
|
|
public static string AppUserName(this ClaimsPrincipal user)
|
|
{
|
|
var selectedAppUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedAppUserNameClaimType);
|
|
if (selectedAppUserClaim != null && !string.IsNullOrWhiteSpace(selectedAppUserClaim.Value))
|
|
{
|
|
return selectedAppUserClaim.Value;
|
|
}
|
|
|
|
var appUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.AppUserNameClaimType);
|
|
if (appUserClaim != null && !string.IsNullOrWhiteSpace(appUserClaim.Value))
|
|
{
|
|
return appUserClaim.Value;
|
|
}
|
|
return string.Empty;
|
|
}
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Gibt die Rollen eines Benutzers zurück
|
|
/// </summary>
|
|
/// <param name="user">ClaimsPrincipal</param>
|
|
/// <returns>Rollen des Benutzers</returns>
|
|
public static List<string> Roles(this ClaimsPrincipal user)
|
|
{
|
|
var rolesList = new List<string>();
|
|
|
|
var roleClaims = user?.Claims.Where(x => x.Type == ClaimTypes.Role).ToList();
|
|
|
|
if (roleClaims != null && roleClaims.Any())
|
|
{
|
|
rolesList.AddRange(from roleClaim in roleClaims where !string.IsNullOrWhiteSpace(roleClaim.Value) select roleClaim.Value);
|
|
}
|
|
|
|
return rolesList;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fügt einen Claim zu einem Benutzer hinzu oder aktualisiert diesen, wenn er existiert
|
|
/// </summary>
|
|
/// <param name="currentPrincipal">ClaimsPrincipal</param>
|
|
/// <param name="key">Key des claims</param>
|
|
/// <param name="value">Zu setzender Wert</param>
|
|
public static void AddUpdateClaim(this ClaimsPrincipal currentPrincipal, string key, string value)
|
|
{
|
|
var identity = currentPrincipal.Identity as ClaimsIdentity;
|
|
if (identity == null)
|
|
return;
|
|
|
|
// check for existing claim and remove it
|
|
var existingClaim = identity.FindFirst(key);
|
|
if (existingClaim != null)
|
|
identity.RemoveClaim(existingClaim);
|
|
|
|
// add new claim
|
|
identity.AddClaim(new Claim(key, value ?? ""));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fügt einen Claim zu einem Benutzer hinzu oder aktualisiert diesen, wenn er existiert
|
|
/// </summary>
|
|
/// <param name="identity">ClaimsIdentity</param>
|
|
/// <param name="key">Key des claims</param>
|
|
/// <param name="value">Zu setzender Wert</param>
|
|
public static void AddUpdateClaim(this ClaimsIdentity identity, string key, string value)
|
|
{
|
|
// check for existing claim and remove it
|
|
var existingClaim = identity.FindFirst(key);
|
|
if (existingClaim != null)
|
|
identity.RemoveClaim(existingClaim);
|
|
|
|
// add new claim
|
|
identity.AddClaim(new Claim(key, value ?? ""));
|
|
}
|
|
}
|
|
}
|