/// <summary> /// 移除用户角色。 /// </summary> /// <param name="user">用户实例对象。</param> /// <param name="normalizedRoleName">验证角色名称。</param> /// <param name="cancellationToken">取消标志。</param> public override async Task RemoveFromRoleAsync(TUser user, string normalizedRoleName, CancellationToken cancellationToken = default) { var role = await FindRoleAsync(normalizedRoleName, cancellationToken); if (role != null) { await UserRoleContext.BeginTransactionAsync(async db => { if (await db.DeleteAsync(x => x.UserId == user.Id && x.RoleId == role.Id, cancellationToken)) { return(await SetMaxRoleAsync(db.As <TRole>(), user.Id, cancellationToken)); } return(false); }, cancellationToken : cancellationToken); } }
/// <summary> /// 设置用户角色。 /// </summary> /// <param name="userId">用户Id。</param> /// <param name="roleIds">角色Id列表。</param> /// <param name="cancellationToken">取消标识。</param> /// <returns>返回设置结果。</returns> public virtual Task <bool> SetUserToRolesAsync(int userId, int[] roleIds, CancellationToken cancellationToken = default) { return(UserRoleContext.BeginTransactionAsync(async db => { await db.DeleteAsync(x => x.UserId == userId, cancellationToken); foreach (var roleId in roleIds) { if (!await db.CreateAsync(new TUserRole { RoleId = roleId, UserId = userId }, cancellationToken)) { return false; } } return await SetMaxRoleAsync(db.As <TRole>(), userId, cancellationToken); }, cancellationToken: cancellationToken)); }
/// <summary> /// 添加用户角色。 /// </summary> /// <param name="user">当前用户实例。</param> /// <param name="normalizedRoleName">验证角色名称。</param> /// <param name="cancellationToken">取消标志。</param> public override async Task AddToRoleAsync(TUser user, string normalizedRoleName, CancellationToken cancellationToken = default) { var role = await RoleManager.FindByNameAsync(normalizedRoleName); if (role == null || await UserRoleContext.AnyAsync(x => x.UserId == user.UserId && x.RoleId == role.RoleId, cancellationToken)) { return; } //更新用户表显示角色Id和角色名称 await UserRoleContext.BeginTransactionAsync(async db => { if (!await db.CreateAsync(CreateUserRole(user, role), cancellationToken)) { return(false); } return(await SetMaxRoleAsync(db.As <TRole>(), user.UserId, cancellationToken)); }, cancellationToken : cancellationToken); }