Skip to content
Snippets Groups Projects
Commit 111b7cb4 authored by Sebastian Mihalache's avatar Sebastian Mihalache
Browse files

feat(authsome): remove author emails when getting a collection

parent 3df6461e
No related branches found
No related tags found
1 merge request!8Sprint #10
......@@ -6,23 +6,43 @@ const statuses = config.get('statuses')
const publicStatusesPermissions = ['author', 'reviewer']
const parseAuthorsData = (coll, matchingCollPerm) => {
if (['reviewer'].includes(matchingCollPerm.permission)) {
coll.authors = coll.authors.map(a => omit(a, ['email']))
}
}
const setPublicStatuses = (coll, matchingCollPerm) => {
const status = get(coll, 'status') || 'draft'
coll.visibleStatus = statuses[status].public
if (!publicStatusesPermissions.includes(matchingCollPerm.permission)) {
coll.visibleStatus = statuses[coll.status].private
}
}
const filterRefusedInvitations = (coll, user) => {
const matchingInv = coll.invitations.find(inv => inv.userId === user.id)
if (matchingInv === undefined) return null
if (matchingInv.hasAnswer === true && !matchingInv.isAccepted) return null
return coll
}
const filterCollectionData = (collectionsPermissions, collection, user) => {
const matchingCollPerm = collectionsPermissions.find(
collPerm => collection.id === collPerm.id,
)
setPublicStatuses(collection, matchingCollPerm)
parseAuthorsData(collection, matchingCollPerm)
if (['reviewer', 'handlingEditor'].includes(matchingCollPerm.permission)) {
return filterRefusedInvitations(collection, user)
}
return collection
}
module.exports = {
parseAuthorsData: (coll, matchingCollPerm) => {
if (['reviewer'].includes(matchingCollPerm.permission)) {
coll.authors = coll.authors.map(a => omit(a, ['email']))
}
},
setPublicStatuses: (coll, matchingCollPerm) => {
const status = get(coll, 'status') || 'draft'
coll.visibleStatus = statuses[status].public
if (!publicStatusesPermissions.includes(matchingCollPerm.permission)) {
coll.visibleStatus = statuses[coll.status].private
}
},
filterRefusedInvitations: (coll, user) => {
const matchingInv = coll.invitations.find(inv => inv.userId === user.id)
if (matchingInv === undefined) return null
if (matchingInv.hasAnswer === true && !matchingInv.isAccepted) return null
return coll
},
parseAuthorsData,
setPublicStatuses,
filterRefusedInvitations,
filterCollectionData,
}
......@@ -4,6 +4,8 @@ const omit = require('lodash/omit')
const helpers = require('./authsome-helpers')
async function teamPermissions(user, operation, object, context) {
if (object.type !== 'collection') return true
const permissions = ['handlingEditor', 'author', 'reviewer']
const teams = await Promise.all(
user.teams.map(async teamId => {
......@@ -20,37 +22,26 @@ async function teamPermissions(user, operation, object, context) {
permission: team.teamType.permissions,
}))
if (collectionsPermissions.length > 0) {
return {
filter: filterParam => {
if (!filterParam.length) return filterParam
const collections = filterParam
.map(coll => {
const matchingCollPerm = collectionsPermissions.find(
collPerm => coll.id === collPerm.id,
)
if (matchingCollPerm === undefined) {
return null
}
helpers.setPublicStatuses(coll, matchingCollPerm)
helpers.parseAuthorsData(coll, matchingCollPerm)
if (
['reviewer', 'handlingEditor'].includes(
matchingCollPerm.permission,
)
) {
return helpers.filterRefusedInvitations(coll, user)
}
return coll
})
.filter(Boolean)
return collections
},
}
}
if (collectionsPermissions.length === 0) return {}
return {}
return {
filter: filterParam => {
if (!filterParam.length) {
return helpers.filterCollectionData(
collectionsPermissions,
filterParam,
user,
)
}
const collections = filterParam
.map(coll =>
helpers.filterCollectionData(collectionsPermissions, coll, user),
)
.filter(Boolean)
return collections
},
}
}
function unauthenticatedUser(operation, object) {
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment