/// <summary> /// RemoveRoleFromUserAsync /// </summary> /// <param name="userId"></param> /// <param name="roleId"></param> /// <param name="lastUser"></param> /// <returns></returns> /// <exception cref="IdentityException"></exception> /// <exception cref="DatabaseException"></exception> public async Task RemoveRoleFromUserAsync(long userId, long roleId, string lastUser) { ThrowIf.NotLongId(userId, nameof(userId)); ThrowIf.NotLongId(roleId, nameof(roleId)); TransactionContext trans = await _transaction.BeginTransactionAsync <RoleOfUser>().ConfigureAwait(false); try { //查重 RoleOfUser?stored = await _roleOfUserRepo.GetByUserIdAndRoleIdAsync(userId, roleId, trans).ConfigureAwait(false); if (stored == null) { throw Exceptions.NotFound(userId: userId, roleId: roleId, cause: "没有找到这样的角色"); } await _roleOfUserRepo.DeleteAsync(stored, lastUser, trans).ConfigureAwait(false); await trans.CommitAsync().ConfigureAwait(false); } catch { await trans.RollbackAsync().ConfigureAwait(false); throw; } }
/// <summary> /// AddRolesToUserAsync /// </summary> /// <param name="userId"></param> /// <param name="roleId"></param> /// <param name="lastUser"></param> /// <returns></returns> /// <exception cref="IdentityException"></exception> /// <exception cref="DatabaseException"></exception> public async Task AddRolesToUserAsync(long userId, long roleId, string lastUser) { ThrowIf.NotLongId(userId, nameof(userId)); ThrowIf.NotLongId(roleId, nameof(roleId)); TransactionContext trans = await _transaction.BeginTransactionAsync <RoleOfUser>().ConfigureAwait(false); try { //查重 long count = await _roleOfUserRepo.CountByUserIdAndRoleIdAsync(userId, roleId, trans).ConfigureAwait(false); if (count != 0) { throw Exceptions.FoundTooMuch(userId: userId, roleId: roleId, cause: "已经有相同的角色"); } RoleOfUser ru = new RoleOfUser(userId, roleId); await _roleOfUserRepo.UpdateAsync(ru, lastUser, trans).ConfigureAwait(false); await trans.CommitAsync().ConfigureAwait(false); } catch { await trans.RollbackAsync().ConfigureAwait(false); throw; } }
/// <summary> /// SignOutAsync /// </summary> /// <param name="signInTokenId"></param> /// <param name="lastUser"></param> /// <returns></returns> /// <exception cref="DatabaseException"></exception> public async Task SignOutAsync(long signInTokenId, string lastUser) { ThrowIf.NotLongId(signInTokenId, nameof(signInTokenId)); TransactionContext transContext = await _transaction.BeginTransactionAsync <SignInToken>().ConfigureAwait(false); try { SignInToken?signInToken = await _signInTokenRepo.GetByIdAsync(signInTokenId, transContext).ConfigureAwait(false); if (signInToken != null) { await _signInTokenRepo.DeleteAsync(signInToken, lastUser, transContext).ConfigureAwait(false); } else { _logger.LogWarning("尝试删除不存在的SignInToken. {SignInTokenId}", signInTokenId); } await transContext.CommitAsync().ConfigureAwait(false); } catch { await transContext.RollbackAsync().ConfigureAwait(false); throw; } }
/// <summary> /// SignOutAsync /// </summary> /// <param name="userId"></param> /// <param name="idiom"></param> /// <param name="logOffType"></param> /// <param name="lastUser"></param> /// <returns></returns> /// <exception cref="DatabaseException"></exception> public async Task SignOutAsync(long userId, DeviceIdiom idiom, LogOffType logOffType, string lastUser) { ThrowIf.NotLongId(userId, nameof(userId)); TransactionContext transactionContext = await _transaction.BeginTransactionAsync <SignInToken>().ConfigureAwait(false); try { await DeleteSignInTokensAsync(userId, idiom, logOffType, lastUser, transactionContext).ConfigureAwait(false); await _transaction.CommitAsync(transactionContext).ConfigureAwait(false); } catch { await _transaction.RollbackAsync(transactionContext).ConfigureAwait(false); throw; } }