public ActionResult Create()
        {
            var model = new BOGroupCreateViewModel
            {
                PermissionGroups = Mapper.Map <List <PermissionGroupViewModel> >(PermissionManager.Groups)
            };

            return(View(model));
        }
        public async Task <ActionResult> Edit(BOGroupCreateViewModel model)
        {
            IEnumerable <string> selectedPermissions = model.PermissionGroups
                                                       .SelectMany(x => x.Permissions.Where(y => y.IsSelected)).Select(x => x.Name);

            if (!ModelState.IsValid)
            {
                model.PermissionGroups = Mapper.Map <List <PermissionGroupViewModel> >(PermissionManager.Groups);
                model.SetSelectedPermissions(selectedPermissions);
                return(View(model));
            }

            ApplicationRole role = await RoleManager.FindByIdAsync(model.Id);

            if (role == null)
            {
                throw new HttpException(404, "Not found");
            }

            ApplicationRole existingRoleByName = await RoleManager.FindByNameAsync(model.Name);

            if (existingRoleByName != null && existingRoleByName.Id != model.Id)
            {
                ModelState.AddModelError(nameof(model.Name), Res.GroupAlreadyExistsMessage);
                model.PermissionGroups = Mapper.Map <List <PermissionGroupViewModel> >(PermissionManager.Groups);
                model.SetSelectedPermissions(selectedPermissions);
                return(View(model));
            }

            ApplicationRole oldRole = Mapper.Map <ApplicationRole>(role);

            role.Name = model.Name;
            IdentityResult result = await RoleManager.UpdateAsync(role, selectedPermissions);

            if (!result.Succeeded)
            {
                throw new Exception(result.Errors.FirstOrDefault());
            }

            var userInfo = new BackOfficeUserInfo();

            Notify.Success(Resources.CommonStrings.RegisterEditedSuccessMessage);
            return(RedirectToAction("Index"));
        }
        public async Task <ActionResult> Create(BOGroupCreateViewModel model)
        {
            Func <ViewResult> errorView = () =>
            {
                model.PermissionGroups = Mapper.Map <List <PermissionGroupViewModel> >(PermissionManager.Groups);
                return(View(model));
            };

            if (!ModelState.IsValid)
            {
                return(errorView());
            }

            ApplicationRole existingRole = await RoleManager.FindByNameAsync(model.Name);

            if (existingRole != null)
            {
                ModelState.AddModelError(nameof(model.Name), Res.GroupAlreadyExistsMessage);
                return(errorView());
            }

            var role = Mapper.Map <ApplicationRole>(model);
            IEnumerable <string> permissions = model.PermissionGroups
                                               .SelectMany(x => x.Permissions.Where(y => y.IsSelected)).Select(x => x.Name);

            IdentityResult result = await RoleManager.CreateAsync(role, permissions, IdEmpresa, IdUsuario);

            if (!result.Succeeded)
            {
                throw new Exception(result.Errors.FirstOrDefault());
            }

            var userInfo = new BackOfficeUserInfo();

            Notify.Success(Resources.CommonStrings.RegisterCreatedSuccessMessage);
            return(RedirectToAction("Index"));
        }