using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using Abp.Configuration.Startup; using Abp.MultiTenancy; using Abp.Runtime; using Abp.Runtime.Session; namespace IwbZero.Runtime.Session { public class IwbSession : ClaimsAbpSession, IIwbSession { public IwbSession( IPrincipalAccessor principalAccessor, IMultiTenancyConfig multiTenancy, ITenantResolver tenantResolver, IAmbientScopeProvider sessionOverrideScopeProvider) : base(principalAccessor, multiTenancy, tenantResolver, sessionOverrideScopeProvider) { } public string UserName { get { Claim claim = GetClaim(IwbClaimTypes.UserName); return claim?.Value ?? ""; } } public string PhoneNumber { get { Claim claim = GetClaim(IwbClaimTypes.PhoneNumber); return claim?.Value ?? ""; } } public string RealName { get { Claim claim = GetClaim(IwbClaimTypes.RealName); return claim?.Value ?? ""; } } public string EmailAddress { get { Claim claim = GetClaim(IwbClaimTypes.EmailAddress); return claim?.Value ?? ""; } } public string AvatarImagePath { get { Claim claim = GetClaim(IwbClaimTypes.AvatarImagePath); return claim?.Value ?? ""; } } public string AccountNo { get { Claim claim = GetClaim(IwbClaimTypes.AccountNo); return claim?.Value ?? ""; } } public int? UserType { get { Claim claim = GetClaim(IwbClaimTypes.UserType); if (string.IsNullOrEmpty(claim?.Value) || !int.TryParse(claim.Value, out var result)) return new int?(); return result; } } public int? AccountType { get { Claim claim = GetClaim(IwbClaimTypes.AccountType); if (string.IsNullOrEmpty(claim?.Value) || !int.TryParse(claim.Value, out var result)) return new int?(); return result; } } public List UserRoles { get { Claim claim = GetClaim(IwbClaimTypes.UserRoles); if (string.IsNullOrEmpty(claim?.Value)) return new List(); var result = claim.Value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).ToList(); return result; } } public List UserRoleIds { get { Claim claim = GetClaim(IwbClaimTypes.UserRoleIds); if (string.IsNullOrEmpty(claim?.Value)) return new List(); var result = claim.Value.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).ToList(); return result; } } public Claim GetClaim(string type) { ClaimsPrincipal principal = PrincipalAccessor.Principal; Claim claim = principal?.Claims.FirstOrDefault(c => c.Type == type); return claim; } //public void ReplaceClaim(string type,string value) //{ // ClaimsPrincipal principal = PrincipalAccessor.Principal; // var identity = principal.Identity as ClaimsIdentity; // if (identity == null) // return; // var existingClaim = identity.FindFirst(type); // if (existingClaim != null) // identity.RemoveClaim(existingClaim); // // add new claim // identity.AddClaim(new Claim(type, value)); // var authenticationManager = HttpContext.Current.GetOwinContext().Authentication; // authenticationManager.AuthenticationResponseGrant = new AuthenticationResponseGrant(new ClaimsPrincipal(identity), new AuthenticationProperties() { IsPersistent = true }); //} } }