public override async Task <SetAdminsResponse> SetAdmins(SetAdminsRequest request, ServerCallContext context) { var domain = await dbContext.Domains.FindIfNullThrowAsync(request.DomainId); var assignments = dbContext.UserDomainAssignments.Where(x => x.Domain == domain); // 1. Set all roles to members await assignments.ForEachAsync(x => { x.Role = Domain.ValueObjects.UserRole.Member; }); // 2. Set the admins to admin. If not in the domain, add them into the admin foreach (var userId in request.AdminIds) { var user = await dbContext.Users.FindIfNullThrowAsync(userId); var userAssignment = await assignments.FirstOrDefaultAsync(x => x.User == user); if (userAssignment != null) { userAssignment.Role = Domain.ValueObjects.UserRole.Admin; } else { var assignment = new UserDomainAssignment(Guid.NewGuid(), user, domain, Domain.ValueObjects.UserRole.Admin); dbContext.UserDomainAssignments.Add(assignment); } } await dbContext.SaveChangesAsync(); return(new SetAdminsResponse { }); }
public async Task <ActionResult> SetAdmins([FromRoute] string domainId, [FromBody] SetAdminsRequest request) { var resp = await(await factory.GetDomainsClientAsync()) .SetAdminsAsync(new AcademyCloud.Identity.Protos.Domains.SetAdminsRequest { DomainId = domainId, AdminIds = { request.Ids }, }); return(NoContent()); }