Beispiel #1
0
        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());
        }