public async Task <PermissionRolesModel> PreparePermissionRolesModel(PermissionRolesModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            var roles = _userService.GetRoles();

            model.AvailableRoles = roles.Select(role => role.ToModel <RoleModel>()).ToList();

            foreach (var permission in await _permissionService.GetAllPermissions())
            {
                model.AvailablePermissions.Add(new PermissionModel
                {
                    Name       = permission.Name,
                    SystemName = permission.SystemName,
                });

                foreach (var role in roles)
                {
                    if (!model.Allowed.ContainsKey(permission.SystemName))
                    {
                        model.Allowed[permission.SystemName] = new Dictionary <int, bool>();
                    }

                    model.Allowed[permission.SystemName][role.Id] =
                        permission.PermissionRoles.Any(map => map.RoleId == role.Id);
                }
            }

            return(model);
        }
Beispiel #2
0
        public async Task <IActionResult> PermissionsSave(PermissionRolesModel model)
        {
            if (!await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageAcl))
            {
                return(AccessDeniedView());
            }

            var permissions = await _permissionService.GetAllPermissions();

            var roles = _userService.GetRoles();

            foreach (var role in roles)
            {
                var formKey = "allow_" + role.Id;
                var permissionSystemNamesToRestrict = !StringValues.IsNullOrEmpty(model.Form[formKey])
                    ? model.Form[formKey].ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList()
                    : new List <string>();

                foreach (var p in permissions)
                {
                    var allow = permissionSystemNamesToRestrict.Contains(p.SystemName);
                    if (allow)
                    {
                        if (p.PermissionRoles.FirstOrDefault(x => x.RoleId == role.Id) != null)
                        {
                            continue;
                        }

                        p.PermissionRoles.Add(new PermissionRoles {
                            Role = role
                        });
                        _permissionService.UpdatePermission(p);
                    }
                    else
                    {
                        if (p.PermissionRoles.FirstOrDefault(x => x.RoleId == role.Id) == null)
                        {
                            continue;
                        }

                        p.PermissionRoles.Remove(p.PermissionRoles.FirstOrDefault(map => map.RoleId == role.Id));
                        _permissionService.UpdatePermission(p);
                    }
                }
            }

            _notificationService.SuccessNotification("The permission has been updated successfully");

            return(RedirectToAction("Permissions"));
        }