Skip to content

Commit 9645f30

Browse files
authored
Merge pull request #98 from Raschudesny/JD-1428
JD-1428. Added usual jira admins permissions to work with WF registry
2 parents 70890ee + cde3507 commit 9645f30

File tree

8 files changed

+45
-24
lines changed

8 files changed

+45
-24
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>ru.mail.jira.plugins</groupId>
66
<artifactId>groovy</artifactId>
7-
<version>1.21.6-jira8</version>
7+
<version>1.21.7-jira8</version>
88
<organization>
99
<name>AtlasTeam</name>
1010
<url>https://atlasteam.ru/</url>

src/main/java/ru/mail/jira/plugins/groovy/impl/PermissionHelper.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,22 @@ public void checkIfAdmin() {
2626
checkIfAdmin(authenticationContext.getLoggedInUser());
2727
}
2828

29+
public void checkIfAdminOrSysAdmin() {
30+
if (!isAdminOrSysAdmin())
31+
throw new SecurityException("User is not admin");
32+
}
33+
2934
public void checkIfAdmin(ApplicationUser user) {
3035
if (!isAdmin(user)) {
3136
throw new SecurityException("User is not admin");
3237
}
3338
}
3439

40+
public boolean isAdminOrSysAdmin() {
41+
ApplicationUser user = authenticationContext.getLoggedInUser();
42+
return globalPermissionManager.hasPermission(GlobalPermissionKey.SYSTEM_ADMIN, user) || globalPermissionManager.hasPermission(GlobalPermissionKey.ADMINISTER, user);
43+
}
44+
3545
public boolean isAdmin() {
3646
return isAdmin(authenticationContext.getLoggedInUser());
3747
}

src/main/java/ru/mail/jira/plugins/groovy/rest/ExecutionResource.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public ExecutionResource(
2929
@Path("/forRegistry/{scriptId}")
3030
public Response getExecutions(@PathParam("scriptId") int scriptId) {
3131
return new RestExecutor<>(() -> {
32-
permissionHelper.checkIfAdmin();
32+
permissionHelper.checkIfAdminOrSysAdmin();
3333

3434
return executionRepository.getRegistryExecutions(scriptId);
3535
}).getResponse();
@@ -39,7 +39,7 @@ public Response getExecutions(@PathParam("scriptId") int scriptId) {
3939
@Path("/forRegistry/{scriptId}/last")
4040
public Response getLastExecutions(@PathParam("scriptId") int scriptId) {
4141
return new RestExecutor<>(() -> {
42-
permissionHelper.checkIfAdmin();
42+
permissionHelper.checkIfAdminOrSysAdmin();
4343

4444
return executionRepository.getLastRegistryExecutions(scriptId);
4545
}).getResponse();
@@ -49,7 +49,7 @@ public Response getLastExecutions(@PathParam("scriptId") int scriptId) {
4949
@Path("/forInline/{scriptId}")
5050
public Response getExecutions(@PathParam("scriptId") String scriptId) {
5151
return new RestExecutor<>(() -> {
52-
permissionHelper.checkIfAdmin();
52+
permissionHelper.checkIfAdminOrSysAdmin();
5353

5454
return executionRepository.getInlineExecutions(scriptId);
5555
}).getResponse();
@@ -59,7 +59,7 @@ public Response getExecutions(@PathParam("scriptId") String scriptId) {
5959
@Path("/forInline/{scriptId}/last")
6060
public Response getLastExecutions(@PathParam("scriptId") String scriptId) {
6161
return new RestExecutor<>(() -> {
62-
permissionHelper.checkIfAdmin();
62+
permissionHelper.checkIfAdminOrSysAdmin();
6363

6464
return executionRepository.getLastInlineExecutions(scriptId);
6565
}).getResponse();

src/main/java/ru/mail/jira/plugins/groovy/rest/RegistryResource.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public RegistryResource(
4848
@WebSudoRequired
4949
public Response getDirectories() {
5050
return new RestExecutor<>(() -> {
51-
permissionHelper.checkIfAdmin();
51+
permissionHelper.checkIfAdminOrSysAdmin();
5252

5353
return scriptRepository.getAllDirectories();
5454
}).getResponse();
@@ -59,7 +59,7 @@ public Response getDirectories() {
5959
@WebSudoRequired
6060
public Response getAllScripts() {
6161
return new RestExecutor<>(() -> {
62-
permissionHelper.checkIfAdmin();
62+
permissionHelper.checkIfAdminOrSysAdmin();
6363

6464
return scriptRepository.getAllScripts();
6565
}).getResponse();
@@ -70,7 +70,7 @@ public Response getAllScripts() {
7070
@WebSudoRequired
7171
public Response getDirectoriesPicker() {
7272
return new RestExecutor<>(() -> {
73-
permissionHelper.checkIfAdmin();
73+
permissionHelper.checkIfAdminOrSysAdmin();
7474

7575
return scriptRepository.getAllDirectoriesForPicker();
7676
}).getResponse();
@@ -81,7 +81,7 @@ public Response getDirectoriesPicker() {
8181
@WebSudoRequired
8282
public Response getDirectory(@PathParam("id") int id) {
8383
return new RestExecutor<>(() -> {
84-
permissionHelper.checkIfAdmin();
84+
permissionHelper.checkIfAdminOrSysAdmin();
8585

8686
return scriptRepository.getDirectory(id);
8787
}).getResponse();
@@ -153,7 +153,7 @@ public Response moveDirectory(@PathParam("id") int id, ParentForm form) {
153153
@WebSudoRequired
154154
public Response getAllScripts(@PathParam("type") WorkflowScriptType workflowScriptType) {
155155
return new RestExecutor<>(() -> {
156-
permissionHelper.checkIfAdmin();
156+
permissionHelper.checkIfAdminOrSysAdmin();
157157

158158
return scriptRepository.getAllScriptDescriptions(workflowScriptType);
159159
}).getResponse();
@@ -164,7 +164,7 @@ public Response getAllScripts(@PathParam("type") WorkflowScriptType workflowScri
164164
@WebSudoRequired
165165
public Response getScript(@PathParam("id") int id) {
166166
return new RestExecutor<>(() -> {
167-
permissionHelper.checkIfAdmin();
167+
permissionHelper.checkIfAdminOrSysAdmin();
168168

169169
return scriptRepository.getScript(id, true, false, false);
170170
}).getResponse();
@@ -175,7 +175,7 @@ public Response getScript(@PathParam("id") int id) {
175175
@WebSudoRequired
176176
public Response getScriptChangelogs(@PathParam("id") int id) {
177177
return new RestExecutor<>(() -> {
178-
permissionHelper.checkIfAdmin();
178+
permissionHelper.checkIfAdminOrSysAdmin();
179179

180180
return scriptRepository.getScriptChangelogs(id);
181181
}).getResponse();
@@ -186,7 +186,7 @@ public Response getScriptChangelogs(@PathParam("id") int id) {
186186
@WebSudoRequired
187187
public Response createScript(RegistryScriptForm form) {
188188
return new RestExecutor<>(() -> {
189-
permissionHelper.checkIfAdmin();
189+
permissionHelper.checkIfAdminOrSysAdmin();
190190

191191
return scriptRepository.createScript(authenticationContext.getLoggedInUser(), form);
192192
})
@@ -199,7 +199,7 @@ public Response createScript(RegistryScriptForm form) {
199199
@WebSudoRequired
200200
public Response updateScript(@PathParam("id") int id, RegistryScriptForm form) {
201201
return new RestExecutor<>(() -> {
202-
permissionHelper.checkIfAdmin();
202+
permissionHelper.checkIfAdminOrSysAdmin();
203203
return scriptRepository.updateScript(authenticationContext.getLoggedInUser(), id, form);
204204
})
205205
.withExceptionMapper(MultipleCompilationErrorsException.class, Response.Status.BAD_REQUEST, e -> ExceptionHelper.mapCompilationException("scriptBody", e))
@@ -250,7 +250,7 @@ public Response moveScript(@PathParam("id") int id, ParentForm form) {
250250
@WebSudoRequired
251251
public Response findScriptWorkflows(@PathParam("id") int id) {
252252
return new RestExecutor<>(() -> {
253-
permissionHelper.checkIfAdmin();
253+
permissionHelper.checkIfAdminOrSysAdmin();
254254
return workflowSearchService.search(new ScriptUsageCollector(id)).getResult();
255255
}).getResponse();
256256
}
@@ -260,7 +260,7 @@ public Response findScriptWorkflows(@PathParam("id") int id) {
260260
@WebSudoRequired
261261
public Response getWorkflowUsage() {
262262
return new RestExecutor<>(() -> {
263-
permissionHelper.checkIfAdmin();
263+
permissionHelper.checkIfAdminOrSysAdmin();
264264

265265
return workflowSearchService.search(new AllScriptUsageCollector()).getResult();
266266
}).getResponse();

src/main/java/ru/mail/jira/plugins/groovy/rest/StaticCheckResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public StaticCheckResource(
4646
@POST
4747
public Response checkStatic(StaticCheckForm form) {
4848
return new RestExecutor<>(() -> {
49-
permissionHelper.checkIfAdmin();
49+
permissionHelper.checkIfAdminOrSysAdmin();
5050

5151
Map<String, String> additionalParams = form.getAdditionalParams();
5252

src/main/java/ru/mail/jira/plugins/groovy/rest/WatcherResource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public Response getWatches(
3232
@PathParam("type") EntityType type
3333
) {
3434
return new RestExecutor<>(() -> {
35-
permissionHelper.checkIfAdmin();
35+
permissionHelper.checkIfAdminOrSysAdmin();
3636

3737
return watcherService.getWatches(type, authenticationContext.getLoggedInUser());
3838
}).getResponse();
@@ -45,7 +45,7 @@ public Response watch(
4545
@PathParam("id") int id
4646
) {
4747
return new RestExecutor<Void>(() -> {
48-
permissionHelper.checkIfAdmin();
48+
permissionHelper.checkIfAdminOrSysAdmin();
4949

5050
watcherService.addWatcher(type, id, authenticationContext.getLoggedInUser());
5151

@@ -60,7 +60,7 @@ public Response unwatch(
6060
@PathParam("id") int id
6161
) {
6262
return new RestExecutor<Void>(() -> {
63-
permissionHelper.checkIfAdmin();
63+
permissionHelper.checkIfAdminOrSysAdmin();
6464
watcherService.removeWatcher(type, id, authenticationContext.getLoggedInUser());
6565

6666
return null;

src/main/java/ru/mail/jira/plugins/groovy/servlet/GroovyServlet.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t
5252
return;
5353
}
5454

55-
if (!permissionHelper.isAdmin()) {
55+
if (path.startsWith("registry") && !permissionHelper.isAdminOrSysAdmin()) {
56+
response.sendError(403);
57+
return;
58+
}
59+
60+
if (!path.startsWith("registry") && !permissionHelper.isAdmin()) {
5661
response.sendError(403);
5762
return;
5863
}

src/main/resources/atlassian-plugin.xml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,15 @@
244244
<label key="ru.mail.jira.plugins.groovy.link.registry" />
245245
<link linkId="mailru-groovy-registry-link">/plugins/servlet/my-groovy/registry</link>
246246

247-
<condition class="com.atlassian.jira.plugin.webfragment.conditions.JiraGlobalPermissionCondition">
248-
<param name="permission">SYSTEM_ADMIN</param>
249-
</condition>
247+
<coditions type="OR">
248+
<condition class="com.atlassian.jira.plugin.webfragment.conditions.JiraGlobalPermissionCondition">
249+
<param name="permission">SYSTEM_ADMIN</param>
250+
</condition>
251+
<condition class="com.atlassian.jira.plugin.webfragment.conditions.JiraGlobalPermissionCondition">
252+
<param name="permission">ADMIN</param>
253+
</condition>
254+
255+
</coditions>
250256
</web-item>
251257

252258
<web-item key="groovy-listeners-menu-item" name="Groovy listeners menu item" section="admin_plugins_menu/admin_mailru_groovy_section">

0 commit comments

Comments
 (0)