/// <summary> /// 获取当前用户实例的所有声明列表。 /// </summary> /// <param name="user">用户实例对象。</param> /// <param name="cancellationToken">取消标志。</param> /// <returns>返回当前用户实例的所有声明列表。</returns> public override async Task <IList <Claim> > GetClaimsAsync(TUser user, CancellationToken cancellationToken = default) { if (user == null) { throw new ArgumentNullException(nameof(user)); } var claims = await UserClaimContext.FetchAsync(x => x.UserId == user.Id, cancellationToken); return(claims.Select(x => x.ToClaim()).ToList()); }
/// <summary> /// 替换用户声明。 /// </summary> /// <param name="user">当前用户实例对象。</param> /// <param name="claim">声明实例对象。</param> /// <param name="newClaim">新的声明实例对象。</param> /// <param name="cancellationToken">取消标志。</param> public override async Task ReplaceClaimAsync(TUser user, Claim claim, Claim newClaim, CancellationToken cancellationToken = default) { if (user == null) { throw new ArgumentNullException(nameof(user)); } if (claim == null) { throw new ArgumentNullException(nameof(claim)); } if (newClaim == null) { throw new ArgumentNullException(nameof(newClaim)); } await UserClaimContext.UpdateAsync( uc => uc.UserId == user.Id && uc.ClaimValue == claim.Value && uc.ClaimType == claim.Type, new { ClaimType = newClaim.Type, ClaimValue = newClaim.Value }, cancellationToken); }
/// <summary> /// 添加用户声明。 /// </summary> /// <param name="user">当前用户实例对象。</param> /// <param name="claims">声明列表。</param> /// <param name="cancellationToken">取消标志。</param> public override async Task AddClaimsAsync(TUser user, IEnumerable <Claim> claims, CancellationToken cancellationToken = default) { if (user == null) { throw new ArgumentNullException(nameof(user)); } if (claims == null) { throw new ArgumentNullException(nameof(claims)); } await UserClaimContext.BeginTransactionAsync(async db => { foreach (var claim in claims) { var dbClaim = CreateUserClaim(user, claim); await db.CreateAsync(dbClaim, cancellationToken); } return(true); }, cancellationToken : cancellationToken); }
/// <summary> /// 移除用户声明。 /// </summary> /// <param name="user">用户实例。</param> /// <param name="claims">声明列表。</param> /// <param name="cancellationToken">取消标志。</param> public override async Task RemoveClaimsAsync(TUser user, IEnumerable <Claim> claims, CancellationToken cancellationToken = default) { if (user == null) { throw new ArgumentNullException(nameof(user)); } if (claims == null) { throw new ArgumentNullException(nameof(claims)); } await UserClaimContext.BeginTransactionAsync(async db => { foreach (var claim in claims) { await db.DeleteAsync( uc => uc.UserId == user.Id && uc.ClaimType == claim.Type && uc.ClaimValue == claim.Value, cancellationToken); } return(true); }, cancellationToken : cancellationToken); }