public async Task <IdentityUtilsResult> RemoveFromRoleAsync(Guid userId, Guid tenantId, Guid roleId) { var role = await roleManager.FindByIdAsync(roleId.ToString()); TenantRolesClaimData tenantClaimData = new TenantRolesClaimData(tenantId); var tenantRolesClaim = (await GetUserTenantRolesClaims(userId, tenantId)); if (tenantRolesClaim != null) { tenantClaimData.Roles = tenantClaimData.Roles .Where(x => x.Id != role.Id); } var result = await AddOrUpdateTenantRolesClaim(userId, tenantId, tenantClaimData); return(result); }
public async Task <IdentityUtilsResult> AddToRoleAsync(Guid userId, Guid tenantId, Guid roleId) { var role = await roleManager.FindByIdAsync(roleId.ToString()); TenantRolesClaimData tenantClaimData = new TenantRolesClaimData(tenantId); var tenantRolesClaim = (await GetUserTenantRolesClaims(userId, tenantId)); if (tenantRolesClaim != null) { tenantClaimData = tenantRolesClaim .Value .DeserializeToTenantRolesClaimData(); } tenantClaimData.Roles = tenantClaimData .Roles .Append(new RoleBasicData(role.Id, role.NormalizedName)) .Distinct(); var result = await AddOrUpdateTenantRolesClaim(userId, tenantId, tenantClaimData); return(result); }
private async Task <IdentityUtilsResult> AddOrUpdateTenantRolesClaim(Guid userId, Guid tenantId, TenantRolesClaimData tenantClaimData) { var result = IdentityResult.Success; var newTenantRolesClaim = new Claim(TenantClaimsSchema.TenantRolesData, tenantClaimData.Serialize()); var oldTenantRolesClaim = await GetUserTenantRolesClaims(userId, tenantId); var(userResult, user) = await FindByIdAsync(userId).UnpackSingleOrDefault(); if (!userResult.Success) { return(userResult); } if (oldTenantRolesClaim != null) { result = await userManager.RemoveClaimAsync(user, oldTenantRolesClaim); } if (result.Succeeded) { result = await userManager.AddClaimAsync(user, newTenantRolesClaim); } return(result.ToIdentityUtilsResult()); }