Hi jira community,
I need to change security level for specific issue type for once jira project. I found this script and I tried using it.
*************************
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.ManagerFactory
import com.atlassian.jira.issue.security.IssueSecurityLevelManager
import com.atlassian.jira.issue.security.IssueSecuritySchemeManager
import com.opensymphony.user.User
import org.apache.log4j.Category
import org.ofbiz.core.entity.GenericValue
log = Category.getInstance("com.onresolve.jira.groovy.PostFunction")
log.debug ("PostFunction function running")
// Set the following according to what you want to be private
def secLevelString = "Internal"
def privateIssueTypes = ["Risk", "Bug"]
if (privateIssueTypes.contains(issue.issueTypeObject.name)) {
ComponentManager componentManager = ComponentManager.getInstance()
IssueSecurityLevelManager securityLevelManager = componentManager.getComponentInstanceOfType(com.atlassian.jira.issue.security.IssueSecurityLevelManager)
IssueSecuritySchemeManager issueSecuritySchemeManager = ManagerFactory.getIssueSecuritySchemeManager()
IssueSecurityLevelManager issueSecurityLevelManager = ManagerFactory.getIssueSecurityLevelManager()
GenericValue srcProjectGV = issue.getProject()
def issueSecurityScheme = issueSecuritySchemeManager.getSchemes(srcProjectGV).size() == 0 ? null : issueSecuritySchemeManager.getSchemes(srcProjectGV)[0]
User currentUser = componentManager.getJiraAuthenticationContext().getUser()
def secLevelGv = issueSecurityLevelManager.getUsersSecurityLevels(issue.getGenericValue(), currentUser).find ({
it.get("name") == secLevelString
});
if (secLevelGv) {
log.debug ("Set ${issue.getKey()} to $secLevelString")
issue.setSecurityLevel (secLevelGv)
issue.store()
}
else {
log.error ("Could not find security level for $secLevelString")
}
}
log4j.category.com.onresolve.jira.groovy = DEBUG, console, filelog
log4j.additivity.com.onresolve.jira.groovy = false
*****************************************************
I've added that script in the "create event" so that the script will run during issue creation.
I tried creating an issue but it does not change the security level. I checked the logs and I found this:
***************************************************
/secure/CreateIssueDetails.jspa [onresolve.jira.groovy.PostFunction] Could not find security level for Internal
***************************************************
I changed the value of "secLevelString" to "Private" but the same issue exist. It just changed Internal to private.
I tried to open the Database of Jira and I found this table "schemeissuesecuritylevels" and I found the corresponding "ID" for security level "Internal". I changed the value of "secLevelString" to corresponding ID number I found in the database but the same issue exist.
May I know what is missing in my script? Do you have suggestion/s to resolve this issue.
Thanks,
GV
Seems to be an old question, but, there is a built-in script for this now:https://jamieechlin.atlassian.net/wiki/display/GRV/Built-In+Scripts#Built-InScripts-SetIssueSecurity
You just need to set the condition to check for the issue type you care about:
issue.issueTypeObject.name == "Bug"
wow, thanks Jamie! This is definitely going to save a lot of time than building my own code :D Thank you x 1000 :)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hello Jamie,
I have researched and discovered that you have given this same answer for several people and it has worked for all of them.
Please tell me what I am doing wrong. I place the following script in the conditions:
issue.issueType.name == 'Error' || issue.issueType.name == 'Issue' || issue.issueType.name == 'Enhancement Request'
I then set the Name of the Security level to the one I want. I place this in the Create Post-Function.
However when I create the issue, the issues keeps resulting to the default Security Level which is different from the one I want to set.
I'm sure the answer is simple but I am confused and drawing a blank right now.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Few things that comes to mind:
1) Did you set the Issue Security Scheme before running this script? It should be under Issues -> Issue Security Schemes. That name on there should match exactly (case sensitive) to find the security issue security type
2) I am not sure why you set secLevelGv based by getUsersSecurityLevels? Cuz if you did setup issue security scheme(#1),then all you have to do is secLevelGv = issueSecurityLevelManager.getSecurityLevelsByName(auditLevelString).iterator().next();
So I did simliar things last year and I use groovy script and add it to run as part of post-functions:
import com.atlassian.jira.ComponentManager import com.atlassian.jira.ManagerFactory import com.atlassian.jira.issue.security.IssueSecurityLevelManager import com.atlassian.jira.issue.security.IssueSecuritySchemeManager import com.opensymphony.user.User import org.apache.log4j.Category import org.ofbiz.core.entity.GenericValue log = Category.getInstance("com.accenture.jira.groovy.PostFunction") // Set the following according to what you want to be private def excludeLevelString = "ExcludeIssueSecurity" def privateIssueTypes = ["Testing Issue Type"] ComponentManager componentManager = ComponentManager.getInstance() IssueSecuritySchemeManager issueSecuritySchemeManager = ManagerFactory.getIssueSecuritySchemeManager() IssueSecurityLevelManager issueSecurityLevelManager = ManagerFactory.getIssueSecurityLevelManager() GenericValue srcProjectGV = issue.getProject() def issueSecurityScheme = issueSecuritySchemeManager.getSchemes(srcProjectGV).size() == 0 ? null : issueSecuritySchemeManager.getSchemes(srcProjectGV)[0] def secLevelGv = null if ( issueSecurityScheme != null){ if (privateIssueTypes.contains(issue.issueTypeObject.name)) { secLevelGv = issueSecurityLevelManager.getSecurityLevelsByName(excludeLevelString).iterator().next(); //now set the SecLev if (secLevelGv){ issue.setSecurityLevel(secLevelGv) issue.store() } } }
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.