mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
add permisson for removeUserFromGroup
This commit is contained in:
parent
6703e4a311
commit
de7dded197
@ -253,6 +253,39 @@ const isMemberOfGroup = rule({
|
||||
}
|
||||
})
|
||||
|
||||
const canRemoveUserFromGroup = rule({
|
||||
cache: 'no_cache',
|
||||
})(async (_parent, args, { user, driver }) => {
|
||||
if (!(user && user.id)) return false
|
||||
const { groupId, userId } = args
|
||||
const currentUserId = user.id
|
||||
if (currentUserId === userId) return false
|
||||
const session = driver.session()
|
||||
const readTxPromise = session.readTransaction(async (transaction) => {
|
||||
const transactionResponse = await transaction.run(
|
||||
`
|
||||
MATCH (User {id: $currentUserId})-[currentUserMembership:MEMBER_OF]->(group:Group {id: $groupId})
|
||||
OPTIONAL MATCH (group)<-[userMembership:MEMBER_OF]-(user:User { id: $userId })
|
||||
RETURN currentUserMembership.role AS currentUserRole, userMembership.role AS userRole
|
||||
`,
|
||||
{ currentUserId, groupId, userId },
|
||||
)
|
||||
return {
|
||||
currentUserRole: transactionResponse.records.map((record) => record.get('currentUserRole'))[0],
|
||||
userRole: transactionResponse.records.map((record) => record.get('userRole'))[0],
|
||||
}
|
||||
})
|
||||
try {
|
||||
const { currentUserRole, userRole } = await readTxPromise
|
||||
return currentUserRole && ['admin', 'owner'].includes(currentUserRole)
|
||||
&& userRole && userRole !== 'owner'
|
||||
} catch (error) {
|
||||
throw new Error(error)
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
})
|
||||
|
||||
const canCommentPost = rule({
|
||||
cache: 'no_cache',
|
||||
})(async (_parent, args, { user, driver }) => {
|
||||
@ -382,6 +415,7 @@ export default shield(
|
||||
JoinGroup: isAllowedToJoinGroup,
|
||||
LeaveGroup: isAllowedToLeaveGroup,
|
||||
ChangeGroupMemberRole: isAllowedToChangeGroupMemberRole,
|
||||
RemoveUserFromGroup: canRemoveUserFromGroup,
|
||||
CreatePost: and(isAuthenticated, isMemberOfGroup),
|
||||
UpdatePost: isAuthor,
|
||||
DeletePost: isAuthor,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user