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.