コード例 #1
0
        public virtual async Task <ActionResult <UserViewModel> > ChangeRoles([FromRoute] string id,
                                                                              [FromBody] Dictionary <string, object> roles)
        {
            var asMod       = !UserFromClaims.HasRole("Admin");
            var userManager = ServiceProvider.GetRequiredService <UserManager <User> >();
            var user        = await Repo.GetOneOrThrow(id);

            var allRoles = await ServiceProvider.GetRequiredService <RoleManager <Role> >().Roles.Select(role => role.Name)
                           .ToListAsync();

            var existingRoles = await userManager.GetRolesAsync(user);

            var newRoles = allRoles.Where(roles.ContainsKey)
                           .ToList();
            var toDeleteRoles = existingRoles.Except(newRoles).ToList();

            if (UserFromClaims.Id == id)
            {
                toDeleteRoles = toDeleteRoles.Where(r => r != (asMod ? "Moderator" : "Admin")).ToList();
            }

            var toAddRoles = newRoles.Except(existingRoles).ToList();

            if (asMod)
            {
                if (toAddRoles.Contains("Admin"))
                {
                    toAddRoles.RemoveAll(r => r == "Admin");
                }

                if (toDeleteRoles.Contains("Admin"))
                {
                    toDeleteRoles.RemoveAll(r => r == "Admin");
                }
            }

            await userManager.AddToRolesAsync(user, toAddRoles);

            await userManager.RemoveFromRolesAsync(user, toDeleteRoles);

            return(Ok(new
            {
                reloadTable = true
            }));
        }
コード例 #2
0
        private async Task <List <CategoryEntity> > GetAvailableCategories()
        {
            var isMod = UserFromClaims.HasRole("Moderator");
            List <CategoryEntity> categories;

            if (isMod)
            {
                categories = await CatsRepo.GetAll();
            }
            else
            {
                var judgeProfile = await GetJudgeProfileOrThrow();

                categories = new List <CategoryEntity> {
                    judgeProfile.Category
                };
            }

            return(categories);
        }