diff --git a/server/graph/resolvers/asset.js b/server/graph/resolvers/asset.js index 91efbdda8..618c3769a 100644 --- a/server/graph/resolvers/asset.js +++ b/server/graph/resolvers/asset.js @@ -41,6 +41,25 @@ module.exports = { const path = parentPath ? `${parentPath}/${r.slug}` : r.slug return WIKI.auth.checkAccess(context.req.user, ['read:assets'], { path }) }) + }, + async folderByPath(obj, args, context) { + const parts = args.path.toLowerCase().split('/').filter(Boolean) + let parentId = null + for (const slug of parts) { + const folder = await WIKI.models.assetFolders.query().where({ + parentId: parentId, + slug: slug + }).first() + if (!folder) { + return null + } + const currentPath = [...parts.slice(0, parts.indexOf(slug) + 1)].join('/') + if (!WIKI.auth.checkAccess(context.req.user, ['read:assets'], { path: currentPath })) { + throw new WIKI.Error.AssetAccessForbidden() + } + parentId = folder.id + } + return WIKI.models.assetFolders.query().findById(parentId) } }, AssetMutation: { diff --git a/server/graph/schemas/asset.graphql b/server/graph/schemas/asset.graphql index f07f1307f..0bfd344f9 100644 --- a/server/graph/schemas/asset.graphql +++ b/server/graph/schemas/asset.graphql @@ -23,6 +23,8 @@ type AssetQuery { folders( parentFolderId: Int! ): [AssetFolder] @auth(requires: ["manage:system", "read:assets"]) + + folderByPath(path: String!): AssetFolder @auth(requires: ["manage:system", "read:assets"]) } # -----------------------------------------------