fix: tags filtered by access (#2100)

This commit is contained in:
Regev Brody 2020-07-04 00:49:54 +03:00 committed by GitHub
parent 41327dd1e8
commit 1c4829f70f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -171,26 +171,51 @@ module.exports = {
* FETCH TAGS * FETCH TAGS
*/ */
async tags (obj, args, context, info) { async tags (obj, args, context, info) {
return WIKI.models.tags.query().orderBy('tag', 'asc') const pages = await WIKI.models.pages.query().column([
'path',
{ locale: 'localeCode' },
])
.withGraphJoined('tags')
const allTags = _.filter(pages, r => {
return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
path: r.path,
locale: r.locale
})
})
.flatMap(r => r.tags)
return _.orderBy(_.uniqBy(allTags, 'id'), ['tag'], ['asc'])
}, },
/** /**
* SEARCH TAGS * SEARCH TAGS
*/ */
async searchTags (obj, args, context, info) { async searchTags (obj, args, context, info) {
const query = _.trim(args.query) const query = _.trim(args.query)
const results = await WIKI.models.tags.query() const pages = await WIKI.models.pages.query().column([
.column('tag') 'path',
.where(builder => { { locale: 'localeCode' },
builder.andWhere(builderSub => { ])
.withGraphJoined('tags')
.modifyGraph('tags', builder => {
builder.select('tag')
})
.modify(queryBuilder => {
queryBuilder.andWhere(builderSub => {
if (WIKI.config.db.type === 'postgres') { if (WIKI.config.db.type === 'postgres') {
builderSub.where('tag', 'ILIKE', `%${query}%`) builderSub.where('tags.tag', 'ILIKE', `%${query}%`)
} else { } else {
builderSub.where('tag', 'LIKE', `%${query}%`) builderSub.where('tags.tag', 'LIKE', `%${query}%`)
} }
}) })
}) })
.limit(5) const allTags = _.filter(pages, r => {
return results.map(r => r.tag) return WIKI.auth.checkAccess(context.req.user, ['read:pages'], {
path: r.path,
locale: r.locale
})
})
.flatMap(r => r.tags)
.map(t => t.tag)
return _.uniq(allTags).slice(0, 5)
}, },
/** /**
* FETCH PAGE TREE * FETCH PAGE TREE