Exemple #1
0
        public override async Task <IViewProviderResult> BuildUpdateAsync(CategoryAdmin category,
                                                                          IViewProviderContext context)
        {
            // Get posted role names
            var rolesToAdd = GetRolesToAdd();

            // Update model
            var model = new EditUserRolesViewModel
            {
                SelectedRoles = rolesToAdd
            };

            if (!await context.Updater.TryUpdateModelAsync(model))
            {
                return(await BuildEditAsync(category, context));
            }

            if (context.Updater.ModelState.IsValid)
            {
                // Remove roles in two steps to prevent an iteration on a modified collection
                var rolesToRemove = new List <string>();
                foreach (var role in await _categoryManager.GetRolesAsync(category))
                {
                    if (!rolesToAdd.Contains(role))
                    {
                        rolesToRemove.Add(role);
                    }
                }

                foreach (var role in rolesToRemove)
                {
                    await _categoryManager.RemoveFromRoleAsync(category, role);
                }

                // Add new roles
                foreach (var role in rolesToAdd)
                {
                    if (!await _categoryManager.IsInRoleAsync(category, role))
                    {
                        await _categoryManager.AddToRoleAsync(category, role);
                    }
                }
            }

            return(await BuildEditAsync(category, context));
        }