How to Bulk Change Permission Schemes?

Zachary Singh May 29, 2018

I am looking at migrating around 75 Projects from an existing Permission scheme into a new Permission scheme. Is there any way to change them in a bulk operation rather than going into each existing project & changing the permission scheme it is associated with?

3 answers

1 accepted

0 votes
Answer accepted
Moses Thomas
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 29, 2018

@Zachary SinghWe have suggestion such as  this  register to  Atlassian so  for now you  can't do  it   base on the API. https://jira.atlassian.com/browse/JRACLOUD-37941

 but you  can try to  use this plugin i believe is possible

https://bobswift.atlassian.net/wiki/spaces/JCLI/pages/91881524/Documentation#Documentation-updateProject

 

I don't  have the exact  query  using this  plugin yet.

 

Best!

niranjan October 11, 2018

@Zachary Singh Did you resolve the issue? If yes, please help me out how to do it, I was in the same boat. 

Zachary Singh October 11, 2018

@niranjan I wasn't able to do so with the plugin provide, so I ended up manually doing so. 

Narendra Kumar February 6, 2020

@Zachary Singh @niranjan  anyone please help here if it can be done using REST call ?

Bernhard Kirschner March 26, 2020

@Zachary Singh@niranjan@Narendra Kumar I am trying to accomplish the same for 100+ projects. Did anyone find an easy solution yet? I read about REST or had the idea of Scriptrunner, but I am not sure that this can be achieved easily.

Narendra Kumar March 26, 2020

Hi @Bernhard Kirschner  @niranjan  @Zachary Singh I've written script that will help you to change the permission scheme for multiple projects in bulk. 

Please find this as - 

java.util.ArrayList allProjectKeys = ['A','B','C','D']
for( projKey in allProjectKeys){
def result2 = put('/rest/api/2/project/'+ projKey +'/permissionscheme')
.header('Content-Type', 'application/json')
.body([
id: 111111        // ID for new permission scheme
])
.asString()

}

 

Run the above script in script-runner . Thanks!

Like # people like this
Wim Abts November 10, 2020

Hi @Narendra Kumar 

Can you provide me the script that should be working in Scriptrunner?

The above one is not complete I believe?

Thanks!

Narendra Kumar November 10, 2020

Hi @Wim Abts  the above script should run. You've to define the ArrayList for your project and just apply the loop and Put call.

First try to run for 4-5 projects to change the permission scheme. Let us know what error you're getting. Thanks!

Wim Abts November 12, 2020

Hi @Narendra Kumar 

 

This is the  error I get when running the script in the Scriptrunner console:

 

2020-11-12 09:07:50,757 ERROR [common.UserScriptEndpoint]: ************************************************************************************* 2020-11-12 09:07:50,757 ERROR [common.UserScriptEndpoint]: Script console script failed: groovy.lang.MissingMethodException: No signature of method: org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.put() is applicable for argument types: (String) values: [/rest/api/2/project/HELP/permissionscheme] Possible solutions: put(java.lang.String, java.lang.Object), get(java.lang.String), putAt(java.lang.String, java.lang.Object), wait(), dump(), any() at Script56.run(Script56.groovy:3)

3 votes
schimata October 27, 2021

Here is the working code, folks!! It perfectly works.

*Just copy and paste* in your Script Runner's Script Console. Replace the below Project keys with your list (you can put up to *50 Project keys in one go*.. it processed first 50 keys, when I added 75 keys) and replace the Target Permission Scheme name.
====================

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.project.Project

def list = ["Proj Key 1", "Proj Key 2", "Proj Key 3", "Proj Key 4"]

for(item in list){
def project = ComponentAccessor.getProjectManager().getProjectByCurrentKey(item)

log.warn("Project is:"+project)

String permissionScheme = "Target Permission Scheme"

ComponentAccessor.getPermissionSchemeManager().removeSchemesFromProject(project)
ComponentAccessor.getPermissionSchemeManager().addSchemeToProject(project, ComponentAccessor.getPermissionSchemeManager().getSchemeObject(permissionScheme))
}

JIRA sys-admins February 7, 2022

This really works with latest script runner plugin as well. Is there a way we can pass .txt file in the def list. ?

1 vote
Hoc March 24, 2021

@Narendra Kumar 

 

Just wanted to say a big thank you for your script. I just moved 400+ projects to a different permission scheme in about 30mins. This would have taken me hours if I had to do it manually one by one. 

 

Thank you!!

Amar Ghag April 5, 2021

Hi @Hoc

It will be great if you share complete script for this.

Thanks in advance.

Like Narendra Kumar likes this
Hoc April 5, 2021

Hi @Amar Ghag 

 

The script was already provided by Narendra Kumar above.

 

Thanks!

Like Narendra Kumar likes this
Amar Ghag April 6, 2021

Hi @Hoc 

 

I have tried that script but its throws me an error "Cannot find matching method".

Using below script in console: 

import java.util.ArrayList
import groovy.lang.Closure
import java.lang.String


ArrayList<String> allProjectKeys = new ArrayList<String>();
Arrays.asList('A','B');
for( projKey in allProjectKeys)

{
def result2 = put('/rest/api/2/project/'+ projKey +'/permissionscheme')
.header('Content-Type', 'application/json')
.body([
id::12302]).asString()
}

Error :

error.png

------------------------------------------------------------------

Hoc April 6, 2021

Hey,

 

All I did was copy the original script. The only thing I did was add in the project keys and the project id that were unique to my case. 

 

Is that what u did?

Amar Ghag April 6, 2021

Hi Hoc,

 

Yes , earlier I used same code with my project keys and permission scheme ID , same error I got.

After that i have added arrays separately , still same error.

Thanks 

Hoc May 20, 2021

Hey @Amar Ghag 

 

Apologies I didnt see your response. 

 

I believe you're right. I had to reinstall the app to run the script and it no longer works for me. Although I got a different error message than yourself.

In the past I just replaced the project key and permission scheme id with my one

 

Perhaps @Narendra Kumar can help you?

Snip20210521_10.pngSnip20210521_11.png

Narendra Kumar June 23, 2021

Hi @Hoc  can you ignore it and run the script? Sometimes, static time error won't stop you to do your work .

If this don't work, just change the Arraylist declaration in Groovy. 

Let me know how it works for you. Thanks!

Regards,
Narendra

Suggest an answer

Log in or Sign up to answer