public Either <Error, DtoGridPermission> GetGridUserPermissions(DtoGridQueryUserPermission gridQuery) { var result = gridQuery.Filter.ToEither(() => Error.Exception).Bind(filter => GetGridUserRoles(new DtoGridQueryUserRole(filter, gridQuery.Pagination))).Bind( gridRoles => { var(errors, permissions) = gridRoles.Rows.Select( role => { var filter = new DtoFilterById(role.Id); var query = new DtoGridQueryRolePermission( filter, gridQuery.Pagination); var perms = GetGridRolePermissions(query); return(perms); }).Partition(); if (errors.Any()) { return(Left <Error, DtoGridPermission>(errors.First())); //TODO: нужна конвертацию списка ошибок в одну аггрегирующую ошибку, убрать errors.First! } var pagedPermissions = permissions.SelectMany(x => x.Rows).AsQueryable().Paginate(gridQuery.Pagination); //TODO: костыль, потому что будет все записи вытягивать из БД, а потом применять пагинацию var grid = new DtoGridPermission(pagedPermissions, permissions.Count()); return(Right <Error, DtoGridPermission>(grid)); }); return(result); }
public Either <Error, DtoGridPermission> GetGridRolePermissions(DtoGridQueryRolePermission gridQuery) { var dbQuery = _appContext.RolePermissions.AsQueryable(); var optionFilter = gridQuery.Filter; optionFilter.Bind(filter => dbQuery = dbQuery.Where(rolePermission => rolePermission.Role.Id == filter.Id)); var rows = dbQuery.Paginate(gridQuery.Pagination).Select(rolePermission => _appContext.Permissions.Find(rolePermission.Permission.Id)).Where(permission => permission != null).Select(permission => new DtoRowPermission(permission.Name, permission.Id)); var result = new DtoGridPermission(rows, _appContext.Permissions.Count()); return(Right <Error, DtoGridPermission>(result)); }
/// <inheritdoc /> public Either <Error, DtoGridPermission> GetGridRolePermissions(DtoGridQueryRolePermission gridQueryRole) { var result = _userService.GetGridRolePermissions(gridQueryRole); return(result); }