Remove users from roles via scriptrunner

aas April 14, 2020

Hello. I've written script which finds all inactive users in project roles in all projects

UserSearchService userSearchService = ComponentAccessor.getComponent(UserSearchService.class)

//find all inactive users
UserSearchParams userSearchParams = (new UserSearchParams.Builder()).allowEmptyQuery(true).
includeActive(false).includeInactive(true).maxResults(100000).build()
def inactiveUsers = userSearchService.findUsers("", userSearchParams)

//find all projects
def allProjects = ComponentAccessor.getProjectManager().getProjectObjects()

def projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager)

def projectRoles
inactiveUsers.each {
for (def project : allProjects){
projectRoles = projectRoleManager.getProjectRoles(it, project)
if (projectRoles.size() != 0){
log.info("User's roles ${it.name} in project ${project.key} : ${projectRoles}")
}
}
}

In logs I have User's roles username in project TEST : [Support-users, Users] 

But how can I remove this users from project roles?

1 answer

2 votes
Łukasz Sielski priv July 24, 2020

Hi, 

I think you have to use ProjectRoleService

This is my test code... need to be combined with yours but more or less works:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.user.search.UserSearchService
import com.atlassian.jira.bc.user.search.UserSearchParams
import com.atlassian.jira.security.roles.ProjectRoleManager
import com.atlassian.jira.bc.projectroles.ProjectRoleService
import com.atlassian.jira.util.SimpleErrorCollection
import com.atlassian.jira.security.roles.actor.UserRoleActorFactory
import com.atlassian.jira.security.roles.RoleActorFactory

UserSearchService userSearchService = ComponentAccessor.getComponent(UserSearchService.class)
ProjectRoleService projectRoleService = ComponentAccessor.getComponent(ProjectRoleService)
RoleActorFactory roleActorFactory = ComponentAccessor.getComponent(RoleActorFactory)
/*
//find all inactive users
UserSearchParams userSearchParams = (new UserSearchParams.Builder()).allowEmptyQuery(true).
includeActive(false).includeInactive(true).maxResults(100000).build()
def inactiveUsers = userSearchService.findUsers("", userSearchParams)
*/
//find all projects

def user = ComponentAccessor.getUserManager().getUserByName("u41958")
//def allProjects = ComponentAccessor.getProjectManager().getProjectObjects()
def project = ComponentAccessor.getProjectManager().getProjectByCurrentKey("projectkey")

user.getUsername()

def projectRoleManager = ComponentAccessor.getComponent(ProjectRoleManager)

def projectRoles

projectRoles = projectRoleManager.getProjectRoles(user, project).each{
def role = it

def users = [user.getUsername().toString()]
log.error users
SimpleErrorCollection errorCollection = new SimpleErrorCollection();
projectRoleService.removeActorsFromProjectRole(users, role, project, "atlassian-user-role-actor", errorCollection) //atlassian-group-role-actor
}

 BR,

Lukasz

Cyril Egan October 12, 2020

In @Łukasz Sielski priv code above.

def users = [user.getUsername().toString()]

may need to be

def users = [user.getKey().toString()]
Like Joe Baldwin likes this
Ankush Kumar February 14, 2022

Hi,

 

I want to remove group from project role.

How this is possible with scriptrunner?

Suggest an answer

Log in or Sign up to answer