using System; using System.Collections.Generic; using System.Linq; using IwbZero.Authorization.Base.Users; namespace IwbZero.Runtime.Session { public static class IwbSessionExtensions { public static string GetUserName(this IIwbSession session) { return GetClaimValue(session, IwbClaimTypes.UserName); } public static string GetRealName(this IIwbSession session) { return GetClaimValue(session, IwbClaimTypes.RealName); } public static string GetUserSingleRole(this IIwbSession session) { return GetClaimValue(session, IwbClaimTypes.UserRoles); } public static string[] GetUserRoles(this IIwbSession session) { var claim = session.GetClaim(IwbClaimTypes.UserRoles); return claim?.Value.Split(new char[','], StringSplitOptions.RemoveEmptyEntries); } public static IEnumerable GetUserRoleList(this IIwbSession session) { var claim = session.GetClaim(IwbClaimTypes.UserRoles); return claim?.Value?.Split(new char[','], StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List(); } public static IEnumerable GetUserRoleIdList(this IIwbSession session) { var claim = session.GetClaim(IwbClaimTypes.UserRoleIds); return claim?.Value?.Split(new char[','], StringSplitOptions.RemoveEmptyEntries).ToList() ?? new List(); } public static int? GetUserType(this IIwbSession session) { return GetClaimValue(session, IwbClaimTypes.UserType); } public static string GetEmailAddress(this IIwbSession session) { return GetClaimValue(session, IwbClaimTypes.EmailAddress); } public static bool? GetRememberMe(this IIwbSession session) { return GetClaimValue(session, IwbClaimTypes.RememberMe); } public static DateTimeOffset? GetExpireTime(this IIwbSession session) { return GetClaimValue(session, IwbClaimTypes.ExpireTime); } public static T? GetClaimValue(this IIwbSession session, string claimTypes) where T : struct { var claim = session.GetClaim(claimTypes); if (string.IsNullOrEmpty(claim?.Value)) return null; var result = (T)Convert.ChangeType(claim.Value, typeof(T)); return result; } public static string GetClaimValue(this IIwbSession session, string claimTypes) { var claim = session.GetClaim(claimTypes); return claim?.Value ?? ""; } public static bool IsUser(this IIwbSession session, UserBase user) { if (session == null) { throw new ArgumentNullException(nameof(session)); } if (user == null) { throw new ArgumentNullException(nameof(user)); } return session.TenantId == user.TenantId && session.UserId.HasValue && session.UserId.Value == user.Id; } } }