-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Low
-
Affects Version/s: 3.11.0
-
Component/s: Permissions
-
3
-
Severity 3 - Minor
-
22
Issue Summary
A single user can't create issues in a specific project when any of the Portfolio fields Team, Target start, target end etc. are present on the Create Issue screen.
Environment
Looking into this it seems the component IssuePropertyServiceBridge74 from Portfolio (and also IssuePropertyServiceBridge80) do not check the result from IssuePropertyService.validateSetProperty().
The invalid result should have the reason for its invalidness attached.
The bridges should at least log the reason when !SetPropertyValidationResult.isValid(), as otherwise we get this unactionable exception.
This is in fact caused two bugs:
1a) IssuePropertyServiceBridge tries to perform the property update even though the validation said it was invalid. Instead it should either log an error or throw a proper exception with details
1b) com.atlassian.rm.teams.customfields.team.TeamCustomFieldType.createValue() should not validate permissions when creating the property. The IssuePropertyService does allow for that, but it's not completely exposed in the Portfolio components. This should be done.
Steps to Reproduce
A user with Create permissions in the project and without Edit Issue permission tries to create an issue.
Expected Results
The user is able to create an issue.
Actual Results
Issue creation fails, and the the following messages are printed in the logs:
2019-10-09 11:54:40,270 catalina-exec-169 ERROR tmoller 714x7342621x6 1m1nsp2 172.16.238.122,172.16.141.223 /secure/QuickCreateIssue.jspa [c.a.j.bc.issue.DefaultIssueService] Error creating issue: com.atlassian.jira.exception.CreateException at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:588) at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:494) at com.atlassian.jira.issue.managers.RequestCachingIssueManager.createIssue(RequestCachingIssueManager.java:192) at com.atlassian.jira.bc.issue.DefaultIssueService.create(DefaultIssueService.java:238) at com.atlassian.jira.bc.issue.DefaultIssueService.create(DefaultIssueService.java:207) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) at com.sun.proxy.$Proxy72.create(Unknown Source) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136) at com.sun.proxy.$Proxy72.create(Unknown Source) at com.atlassian.jira.quickedit.action.QuickCreateIssue.doExecute(QuickCreateIssue.java:308) ... 1 filtered at com.atlassian.jira.action.JiraActionSupport.execute(JiraActionSupport.java:63) ... 7 filtered at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ... 48 filtered at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:62) ... 12 filtered at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21) ... 58 filtered at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66) ... 1 filtered at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64) ... 39 filtered at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30) ... 10 filtered at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21) ... 4 filtered at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36) ... 26 filtered at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25) ... 26 filtered at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: com.atlassian.jira.workflow.WorkflowException at com.atlassian.jira.workflow.OSWorkflowManager.createIssue(OSWorkflowManager.java:768) at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:580) ... 261 more Caused by: java.lang.IllegalArgumentException at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108) at com.atlassian.jira.entity.property.DelegatingEntityPropertyService.setProperty(DelegatingEntityPropertyService.java:41) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) at com.sun.proxy.$Proxy444.setProperty(Unknown Source) ... 2 filtered at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136) at com.sun.proxy.$Proxy444.setProperty(Unknown Source) at com.atlassian.rm.common.bridges.jira.issue.properties.IssuePropertyServiceBridge74.setProperty(IssuePropertyServiceBridge74.java:52) at com.atlassian.rm.common.env.issues.JiraIssuePropertyService.setProperty(JiraIssuePropertyService.java:263) at com.atlassian.rm.common.env.issues.JiraIssuePropertyService.set(JiraIssuePropertyService.java:104) at com.atlassian.rm.teams.customfields.team.TeamIssuePropertyService.setTeamId(TeamIssuePropertyService.java:30) at com.atlassian.rm.teams.customfields.team.IssueTeamService.setTeam(IssueTeamService.java:46) at com.atlassian.rm.teams.customfields.team.TeamCustomFieldTypeHelper.setTeamOnIssue(TeamCustomFieldTypeHelper.java:105) at com.atlassian.rm.teams.customfields.team.TeamCustomFieldType.createValue(TeamCustomFieldType.java:69) at com.atlassian.rm.teams.customfields.team.TeamCustomFieldType.createValue(TeamCustomFieldType.java:22) at com.atlassian.jira.issue.fields.ImmutableCustomField.createValue(ImmutableCustomField.java:693) at com.atlassian.jira.workflow.function.issue.IssueCreateFunction.execute(IssueCreateFunction.java:81) at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:1014) at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1407) at com.opensymphony.workflow.AbstractWorkflow.initialize(AbstractWorkflow.java:606) at com.atlassian.jira.workflow.OSWorkflowManager.createIssue(OSWorkflowManager.java:742) ... 262 more
Notes
Please note that there is no call to Preconditions.checkArgument inside DelegatingEntityPropertyService.setProperty().
I think the stacktrace is missing one frame (for whatever reason), see: https://jira.atlassian.com/browse/JRASERVER-70114
When manually executing IssuePropertyService.setProperty(user, invalidValidationResult) I get the following stacktrace which makes more sense and which I assume would also be the correct stacktrace for the mentioned issue:
java.lang.IllegalArgumentException at com.google.common.base.Preconditions.checkArgument(Preconditions.java:108) at com.atlassian.jira.entity.property.BaseEntityPropertyService.setProperty(BaseEntityPropertyService.java:97) at com.atlassian.jira.entity.property.DelegatingEntityPropertyService.setProperty(DelegatingEntityPropertyService.java:41)
Workaround
Option1 : The user needs to be assigned Edit Issue permission.
Option2 : Remove Portfolio fields from the Create issue screen.