using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; namespace gehGassi.Web.Auth { /// /// Erweiterungen für ClaimsPrincipal /// public static class UserExtensions { #region Customer /// /// Gibt die Id des zugeordneten Kunden zurück /// /// ClaimsPrincipal /// Id des Kunden oder null wenn nicht zugeordnet 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; } /// /// Gibt die UniqueId des zugeordneten Kunden zurück /// /// ClaimsPrincipal /// Id des Kunden oder null wenn nicht zugeordnet 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; } /// /// Gibt den Namen des zugeordneten Kunden zurück /// /// ClaimsPrincipal /// Name des Kunden 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 /// /// Gibt die Id des zugeordneten App-Users zurück /// /// ClaimsPrincipal /// Id des App-Users oder null wenn nicht zugeordnet 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; } /// /// Gibt den Namen des zugeordneten App-Users zurück /// /// ClaimsPrincipal /// Name des App-Users 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 /// /// Gibt die Rollen eines Benutzers zurück /// /// ClaimsPrincipal /// Rollen des Benutzers public static List Roles(this ClaimsPrincipal user) { var rolesList = new List(); 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; } /// /// Fügt einen Claim zu einem Benutzer hinzu oder aktualisiert diesen, wenn er existiert /// /// ClaimsPrincipal /// Key des claims /// Zu setzender Wert 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 ?? "")); } /// /// Fügt einen Claim zu einem Benutzer hinzu oder aktualisiert diesen, wenn er existiert /// /// ClaimsIdentity /// Key des claims /// Zu setzender Wert 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 ?? "")); } } }