Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

How to remove user space permissions via SpacePermissionManagerInternal

Rafał Żydek
Contributor
May 24, 2022

Yep, thats my problem. I want to move from SpacePermissionManager to SpacePermissionManagerInternal becaouse of deprication.

 

This is my scenario:
-user create new space
-script will remove creator from user space permission

This is my code how I want to do it, but have problems here:

 

<code>

import com.atlassian.confluence.internal.security.SpacePermissionContext
import com.atlassian.confluence.internal.security.SpacePermissionManagerInternal
import com.atlassian.confluence.security.SpacePermission
import com.atlassian.confluence.spaces.Space
import com.atlassian.confluence.spaces.SpaceManager
import com.atlassian.spring.container.ContainerManager


def context = SpacePermissionContext.createDefault()
def spaceManager = ContainerManager.getComponent("spaceManager") as SpaceManager
def spaceToClean = spaceManager.getSpace('88GGBBNNYY')
def usersToDelete

spaceToClean.getPermissions().each {spacePerm->
       if( spacePerm.isUserPermission() ) { usersToDelete= spacePerm.getUserSubject() }
}

SpacePermissionManagerInternal.removeAllUserPermissions( usersToDelete, context )
</code>
Problem?

groovy.lang.MissingMethodException: No signature of method: static com.atlassian.confluence.internal.security.SpacePermissionManagerInternal.removeAllUserPermissions() is applicable for argument types: (com.atlassian.confluence.user.ConfluenceUserImpl_$$_jvst242_7...) values: [ConfluenceUserImpl{name='rafal.zydek@test.orangesharing.com', key=8a7d81847ffd62b9017ffe36f90e0000}, ...] at Script357.run(Script357.groovy:18)

3 answers

1 vote
Simon Tost _TNG_
Contributor
November 15, 2024

Interesting. I didn't know about the ContainerManager.

There is a ScriptRunner recipe over at the folks at Adaptavist, which looks like it can be adpated for your purposes...
It avoids using the 'removeAllUserPermissions' call altogether, though.

import com.atlassian.user.User
import com.atlassian.confluence.spaces.Space
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.confluence.security.SpacePermission
import com.atlassian.confluence.security.SpacePermissionManager
import com.atlassian.confluence.internal.security.SpacePermissionManagerInternal
import com.atlassian.confluence.internal.security.SpacePermissionContext

[...]

def spacePermissionManager = ComponentLocator.getComponent(SpacePermissionManager) as SpacePermissionManagerInternal
def spaceContext = SpacePermissionContext.createDefault()

def permissionsToRemove = [] as List<SpacePermission>

space.permissions.each { permission ->
if (permission.userSubject == user) {
permissionsToRemove.add(permission)
}
}

permissionsToRemove.each { permission ->
spacePermissionManager.removePermission(permission, spaceContext)
log.warn "${permission.type} permission for ${user.name} in space ${space.name} has been revoked."
}

 

0 votes
Rolf Lader
Community Champion
September 21, 2023

Hi @Rafał Żydek 

I can't find the method 'spacePerm.getUserSubject()' in com.atlassian.confluence.security.SpacePermission!

Have you found a solution for the problem in the meantime?

Best regards, Rolf

0 votes
Rafał Żydek
Contributor
May 24, 2022

tried also that varation: 

 

import com.atlassian.confluence.internal.security.SpacePermissionContext
import com.atlassian.confluence.internal.security.SpacePermissionManagerInternal
import com.atlassian.confluence.security.SpacePermission
import com.atlassian.confluence.spaces.Space
import com.atlassian.confluence.spaces.SpaceManager
import com.atlassian.spring.container.ContainerManager
import com.atlassian.sal.api.component.ComponentLocator

def context = SpacePermissionContext.createDefault()
def spaceManager = ContainerManager.getComponent("spaceManager") as SpaceManager
def spaceToClean = spaceManager.getSpace('88GGBBNNYY')
def usersToDelete

spaceToClean.getPermissions().each {spacePerm->
       if( spacePerm.isUserPermission() ) { usersToDelete= spacePerm.getUserSubject() }
}

def spacePermissionManager = ComponentLocator.getComponent(SpacePermissionManagerInternal)
spacePermissionManager.removeAllUserPermissions( usersToDelete, context )
Error:
2022-05-24 13:33:55,113 WARN [component.DefaultComponentLocator]: More than one instance of com.atlassian.confluence.internal.security.SpacePermissionManagerInternal found but none of them has key spacePermissionManagerInternal 2022-05-24 13:33:55,115 ERROR [common.UserScriptEndpoint]: ************************************************************************************* 2022-05-24 13:33:55,115 ERROR [common.UserScriptEndpoint]: Script console script failed: java.lang.NullPointerException: Cannot invoke method removeAllUserPermissions() on null object

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events