You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PermissionTemplateServiceTest.java 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2018 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.server.permission;
  21. import java.util.List;
  22. import javax.annotation.Nullable;
  23. import org.junit.Rule;
  24. import org.junit.Test;
  25. import org.junit.rules.ExpectedException;
  26. import org.sonar.api.resources.Qualifiers;
  27. import org.sonar.api.resources.ResourceTypes;
  28. import org.sonar.api.utils.internal.AlwaysIncreasingSystem2;
  29. import org.sonar.api.web.UserRole;
  30. import org.sonar.core.permission.GlobalPermissions;
  31. import org.sonar.db.DbSession;
  32. import org.sonar.db.DbTester;
  33. import org.sonar.db.component.ComponentDto;
  34. import org.sonar.db.component.ResourceTypesRule;
  35. import org.sonar.db.organization.OrganizationDto;
  36. import org.sonar.db.permission.template.PermissionTemplateDbTester;
  37. import org.sonar.db.permission.template.PermissionTemplateDto;
  38. import org.sonar.db.user.GroupDto;
  39. import org.sonar.db.user.UserDto;
  40. import org.sonar.server.es.ProjectIndexers;
  41. import org.sonar.server.es.TestProjectIndexers;
  42. import org.sonar.server.permission.ws.template.DefaultTemplatesResolverRule;
  43. import org.sonar.server.tester.UserSessionRule;
  44. import static java.util.Collections.singletonList;
  45. import static org.assertj.core.api.Assertions.assertThat;
  46. import static org.sonar.core.permission.GlobalPermissions.SCAN_EXECUTION;
  47. import static org.sonar.db.permission.OrganizationPermission.ADMINISTER;
  48. import static org.sonar.db.permission.OrganizationPermission.PROVISION_PROJECTS;
  49. public class PermissionTemplateServiceTest {
  50. @Rule
  51. public ExpectedException throwable = ExpectedException.none();
  52. @Rule
  53. public DbTester dbTester = DbTester.create(new AlwaysIncreasingSystem2());
  54. @Rule
  55. public DefaultTemplatesResolverRule defaultTemplatesResolver = DefaultTemplatesResolverRule.withGovernance();
  56. private ResourceTypes resourceTypes = new ResourceTypesRule().setRootQualifiers(Qualifiers.PROJECT);
  57. private PermissionService permissionService = new PermissionServiceImpl(resourceTypes);
  58. private UserSessionRule userSession = UserSessionRule.standalone();
  59. private PermissionTemplateDbTester templateDb = dbTester.permissionTemplates();
  60. private DbSession session = dbTester.getSession();
  61. private ProjectIndexers projectIndexers = new TestProjectIndexers();
  62. private PermissionTemplateService underTest = new PermissionTemplateService(dbTester.getDbClient(), projectIndexers, userSession, defaultTemplatesResolver);
  63. @Test
  64. public void apply_does_not_insert_permission_to_group_AnyOne_when_applying_template_on_private_project() {
  65. OrganizationDto organization = dbTester.organizations().insert();
  66. ComponentDto privateProject = dbTester.components().insertPrivateProject(organization);
  67. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  68. dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, "p1");
  69. underTest.applyAndCommit(session, permissionTemplate, singletonList(privateProject));
  70. assertThat(selectProjectPermissionsOfGroup(organization, null, privateProject)).isEmpty();
  71. }
  72. @Test
  73. public void apply_default_does_not_insert_permission_to_group_AnyOne_when_applying_template_on_private_project() {
  74. OrganizationDto organization = dbTester.organizations().insert();
  75. ComponentDto privateProject = dbTester.components().insertPrivateProject(organization);
  76. UserDto creator = dbTester.users().insertUser();
  77. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  78. dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, "p1");
  79. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  80. underTest.applyDefault(session, organization.getUuid(), privateProject, creator.getId());
  81. assertThat(selectProjectPermissionsOfGroup(organization, null, privateProject)).isEmpty();
  82. }
  83. @Test
  84. public void apply_inserts_permissions_to_group_AnyOne_but_USER_and_CODEVIEWER_when_applying_template_on_public_project() {
  85. OrganizationDto organization = dbTester.organizations().insert();
  86. ComponentDto publicProject = dbTester.components().insertPublicProject(organization);
  87. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  88. permissionService.getAllProjectPermissions()
  89. .forEach(perm -> dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, perm));
  90. dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, "p1");
  91. underTest.applyAndCommit(session, permissionTemplate, singletonList(publicProject));
  92. assertThat(selectProjectPermissionsOfGroup(organization, null, publicProject))
  93. .containsOnly("p1", UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  94. }
  95. @Test
  96. public void applyDefault_inserts_permissions_to_group_AnyOne_but_USER_and_CODEVIEWER_when_applying_template_on_public_project() {
  97. OrganizationDto organization = dbTester.organizations().insert();
  98. ComponentDto publicProject = dbTester.components().insertPublicProject(organization);
  99. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  100. permissionService.getAllProjectPermissions()
  101. .forEach(perm -> dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, perm));
  102. dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, "p1");
  103. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  104. underTest.applyDefault(session, organization.getUuid(), publicProject, null);
  105. assertThat(selectProjectPermissionsOfGroup(organization, null, publicProject))
  106. .containsOnly("p1", UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  107. }
  108. @Test
  109. public void apply_inserts_any_permissions_to_group_when_applying_template_on_private_project() {
  110. OrganizationDto organization = dbTester.organizations().insert();
  111. ComponentDto privateProject = dbTester.components().insertPrivateProject(organization);
  112. GroupDto group = dbTester.users().insertGroup(organization);
  113. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  114. permissionService.getAllProjectPermissions()
  115. .forEach(perm -> dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, perm));
  116. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, "p1");
  117. underTest.applyAndCommit(session, permissionTemplate, singletonList(privateProject));
  118. assertThat(selectProjectPermissionsOfGroup(organization, group, privateProject))
  119. .containsOnly("p1", UserRole.CODEVIEWER, UserRole.USER, UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  120. }
  121. @Test
  122. public void applyDefault_inserts_any_permissions_to_group_when_applying_template_on_private_project() {
  123. OrganizationDto organization = dbTester.organizations().insert();
  124. GroupDto group = dbTester.users().insertGroup(organization);
  125. ComponentDto privateProject = dbTester.components().insertPrivateProject(organization);
  126. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  127. permissionService.getAllProjectPermissions()
  128. .forEach(perm -> dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, perm));
  129. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, "p1");
  130. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  131. underTest.applyDefault(session, organization.getUuid(), privateProject, null);
  132. assertThat(selectProjectPermissionsOfGroup(organization, group, privateProject))
  133. .containsOnly("p1", UserRole.CODEVIEWER, UserRole.USER, UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  134. }
  135. @Test
  136. public void apply_inserts_permissions_to_group_but_USER_and_CODEVIEWER_when_applying_template_on_public_project() {
  137. OrganizationDto organization = dbTester.organizations().insert();
  138. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  139. ComponentDto publicProject = dbTester.components().insertPublicProject(organization);
  140. GroupDto group = dbTester.users().insertGroup(organization);
  141. permissionService.getAllProjectPermissions()
  142. .forEach(perm -> dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, perm));
  143. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, "p1");
  144. underTest.applyAndCommit(session, permissionTemplate, singletonList(publicProject));
  145. assertThat(selectProjectPermissionsOfGroup(organization, group, publicProject))
  146. .containsOnly("p1", UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  147. }
  148. @Test
  149. public void applyDefault_inserts_permissions_to_group_but_USER_and_CODEVIEWER_when_applying_template_on_public_project() {
  150. OrganizationDto organization = dbTester.organizations().insert();
  151. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  152. ComponentDto publicProject = dbTester.components().insertPublicProject(organization);
  153. GroupDto group = dbTester.users().insertGroup(organization);
  154. permissionService.getAllProjectPermissions()
  155. .forEach(perm -> dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, perm));
  156. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, "p1");
  157. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  158. underTest.applyDefault(session, organization.getUuid(), publicProject, null);
  159. assertThat(selectProjectPermissionsOfGroup(organization, group, publicProject))
  160. .containsOnly("p1", UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  161. }
  162. @Test
  163. public void apply_inserts_permissions_to_user_but_USER_and_CODEVIEWER_when_applying_template_on_public_project() {
  164. OrganizationDto organization = dbTester.organizations().insert();
  165. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  166. ComponentDto publicProject = dbTester.components().insertPublicProject(organization);
  167. UserDto user = dbTester.users().insertUser();
  168. permissionService.getAllProjectPermissions()
  169. .forEach(perm -> dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, perm));
  170. dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, "p1");
  171. underTest.applyAndCommit(session, permissionTemplate, singletonList(publicProject));
  172. assertThat(selectProjectPermissionsOfUser(user, publicProject))
  173. .containsOnly("p1", UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  174. }
  175. @Test
  176. public void applyDefault_inserts_permissions_to_user_but_USER_and_CODEVIEWER_when_applying_template_on_public_project() {
  177. OrganizationDto organization = dbTester.organizations().insert();
  178. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  179. ComponentDto publicProject = dbTester.components().insertPublicProject(organization);
  180. UserDto user = dbTester.users().insertUser();
  181. permissionService.getAllProjectPermissions()
  182. .forEach(perm -> dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, perm));
  183. dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, "p1");
  184. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  185. underTest.applyDefault(session, organization.getUuid(), publicProject, null);
  186. assertThat(selectProjectPermissionsOfUser(user, publicProject))
  187. .containsOnly("p1", UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  188. }
  189. @Test
  190. public void apply_inserts_any_permissions_to_user_when_applying_template_on_private_project() {
  191. OrganizationDto organization = dbTester.organizations().insert();
  192. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  193. ComponentDto privateProject = dbTester.components().insertPrivateProject(organization);
  194. UserDto user = dbTester.users().insertUser();
  195. permissionService.getAllProjectPermissions()
  196. .forEach(perm -> dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, perm));
  197. dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, "p1");
  198. underTest.applyAndCommit(session, permissionTemplate, singletonList(privateProject));
  199. assertThat(selectProjectPermissionsOfUser(user, privateProject))
  200. .containsOnly("p1", UserRole.CODEVIEWER, UserRole.USER, UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  201. }
  202. @Test
  203. public void applyDefault_inserts_any_permissions_to_user_when_applying_template_on_private_project() {
  204. OrganizationDto organization = dbTester.organizations().insert();
  205. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  206. ComponentDto privateProject = dbTester.components().insertPrivateProject(organization);
  207. UserDto user = dbTester.users().insertUser();
  208. permissionService.getAllProjectPermissions()
  209. .forEach(perm -> dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, perm));
  210. dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, "p1");
  211. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  212. underTest.applyDefault(session, organization.getUuid(), privateProject, null);
  213. assertThat(selectProjectPermissionsOfUser(user, privateProject))
  214. .containsOnly("p1", UserRole.CODEVIEWER, UserRole.USER, UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  215. }
  216. @Test
  217. public void applyDefault_inserts_permissions_to_ProjectCreator_but_USER_and_CODEVIEWER_when_applying_template_on_public_project() {
  218. OrganizationDto organization = dbTester.organizations().insert();
  219. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  220. ComponentDto publicProject = dbTester.components().insertPublicProject(organization);
  221. UserDto user = dbTester.users().insertUser();
  222. permissionService.getAllProjectPermissions()
  223. .forEach(perm -> dbTester.permissionTemplates().addProjectCreatorToTemplate(permissionTemplate, perm));
  224. dbTester.permissionTemplates().addProjectCreatorToTemplate(permissionTemplate, "p1");
  225. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  226. underTest.applyDefault(session, organization.getUuid(), publicProject, user.getId());
  227. assertThat(selectProjectPermissionsOfUser(user, publicProject))
  228. .containsOnly("p1", UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  229. }
  230. @Test
  231. public void applyDefault_inserts_any_permissions_to_ProjectCreator_when_applying_template_on_private_project() {
  232. OrganizationDto organization = dbTester.organizations().insert();
  233. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  234. ComponentDto privateProject = dbTester.components().insertPrivateProject(organization);
  235. UserDto user = dbTester.users().insertUser();
  236. permissionService.getAllProjectPermissions()
  237. .forEach(perm -> dbTester.permissionTemplates().addProjectCreatorToTemplate(permissionTemplate, perm));
  238. dbTester.permissionTemplates().addProjectCreatorToTemplate(permissionTemplate, "p1");
  239. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  240. underTest.applyDefault(session, organization.getUuid(), privateProject, user.getId());
  241. assertThat(selectProjectPermissionsOfUser(user, privateProject))
  242. .containsOnly("p1", UserRole.CODEVIEWER, UserRole.USER, UserRole.ADMIN, UserRole.ISSUE_ADMIN, UserRole.SECURITYHOTSPOT_ADMIN, GlobalPermissions.SCAN_EXECUTION);
  243. }
  244. @Test
  245. public void apply_template_on_view() {
  246. OrganizationDto organization = dbTester.organizations().insert();
  247. ComponentDto view = dbTester.components().insertView(organization);
  248. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  249. GroupDto group = dbTester.users().insertGroup(organization);
  250. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, ADMINISTER.getKey());
  251. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, PROVISION_PROJECTS.getKey());
  252. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  253. underTest.applyDefault(session, organization.getUuid(), view, null);
  254. assertThat(selectProjectPermissionsOfGroup(organization, group, view))
  255. .containsOnly(ADMINISTER.getKey(), PROVISION_PROJECTS.getKey());
  256. }
  257. @Test
  258. public void apply_default_template_on_application() {
  259. OrganizationDto organization = dbTester.organizations().insert();
  260. ComponentDto view = dbTester.components().insertPublicApplication(organization);
  261. PermissionTemplateDto projectPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  262. PermissionTemplateDto appPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  263. GroupDto group = dbTester.users().insertGroup(organization);
  264. dbTester.permissionTemplates().addGroupToTemplate(appPermissionTemplate, group, ADMINISTER.getKey());
  265. dbTester.permissionTemplates().addGroupToTemplate(appPermissionTemplate, group, PROVISION_PROJECTS.getKey());
  266. dbTester.organizations().setDefaultTemplates(organization, projectPermissionTemplate.getUuid(), appPermissionTemplate.getUuid(), null);
  267. underTest.applyDefault(session, organization.getUuid(), view, null);
  268. assertThat(selectProjectPermissionsOfGroup(organization, group, view))
  269. .containsOnly(ADMINISTER.getKey(), PROVISION_PROJECTS.getKey());
  270. }
  271. @Test
  272. public void apply_default_template_on_portfolio() {
  273. OrganizationDto organization = dbTester.organizations().insert();
  274. ComponentDto view = dbTester.components().insertPublicPortfolio(organization);
  275. PermissionTemplateDto projectPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  276. PermissionTemplateDto portPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  277. GroupDto group = dbTester.users().insertGroup(organization);
  278. dbTester.permissionTemplates().addGroupToTemplate(portPermissionTemplate, group, ADMINISTER.getKey());
  279. dbTester.permissionTemplates().addGroupToTemplate(portPermissionTemplate, group, PROVISION_PROJECTS.getKey());
  280. dbTester.organizations().setDefaultTemplates(organization, projectPermissionTemplate.getUuid(), null, portPermissionTemplate.getUuid());
  281. underTest.applyDefault(session, organization.getUuid(), view, null);
  282. assertThat(selectProjectPermissionsOfGroup(organization, group, view))
  283. .containsOnly(ADMINISTER.getKey(), PROVISION_PROJECTS.getKey());
  284. }
  285. @Test
  286. public void apply_project_default_template_on_view_when_no_view_default_template() {
  287. OrganizationDto organization = dbTester.organizations().insert();
  288. ComponentDto view = dbTester.components().insertView(organization);
  289. PermissionTemplateDto projectPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  290. GroupDto group = dbTester.users().insertGroup(organization);
  291. dbTester.permissionTemplates().addGroupToTemplate(projectPermissionTemplate, group, PROVISION_PROJECTS.getKey());
  292. dbTester.organizations().setDefaultTemplates(organization, projectPermissionTemplate.getUuid(), null, null);
  293. underTest.applyDefault(session, organization.getUuid(), view, null);
  294. assertThat(selectProjectPermissionsOfGroup(organization, group, view)).containsOnly(PROVISION_PROJECTS.getKey());
  295. }
  296. @Test
  297. public void apply_template_on_applications() {
  298. OrganizationDto organization = dbTester.organizations().insert();
  299. ComponentDto application = dbTester.components().insertApplication(organization);
  300. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  301. GroupDto group = dbTester.users().insertGroup(organization);
  302. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, ADMINISTER.getKey());
  303. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, group, PROVISION_PROJECTS.getKey());
  304. dbTester.organizations().setDefaultTemplates(organization, permissionTemplate.getUuid(), null, null);
  305. underTest.applyDefault(session, organization.getUuid(), application, null);
  306. assertThat(selectProjectPermissionsOfGroup(organization, group, application))
  307. .containsOnly(ADMINISTER.getKey(), PROVISION_PROJECTS.getKey());
  308. }
  309. @Test
  310. public void apply_default_view_template_on_application() {
  311. OrganizationDto organization = dbTester.organizations().insert();
  312. ComponentDto application = dbTester.components().insertApplication(organization);
  313. PermissionTemplateDto projectPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  314. PermissionTemplateDto appPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  315. PermissionTemplateDto portPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  316. GroupDto group = dbTester.users().insertGroup(organization);
  317. dbTester.permissionTemplates().addGroupToTemplate(appPermissionTemplate, group, ADMINISTER.getKey());
  318. dbTester.permissionTemplates().addGroupToTemplate(appPermissionTemplate, group, PROVISION_PROJECTS.getKey());
  319. dbTester.organizations().setDefaultTemplates(organization, projectPermissionTemplate.getUuid(), appPermissionTemplate.getUuid(), portPermissionTemplate.getUuid());
  320. underTest.applyDefault(session, organization.getUuid(), application, null);
  321. assertThat(selectProjectPermissionsOfGroup(organization, group, application))
  322. .containsOnly(ADMINISTER.getKey(), PROVISION_PROJECTS.getKey());
  323. }
  324. @Test
  325. public void apply_project_default_template_on_application_when_no_application_default_template() {
  326. OrganizationDto organization = dbTester.organizations().insert();
  327. ComponentDto application = dbTester.components().insertApplication(organization);
  328. PermissionTemplateDto projectPermissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  329. GroupDto group = dbTester.users().insertGroup(organization);
  330. dbTester.permissionTemplates().addGroupToTemplate(projectPermissionTemplate, group, PROVISION_PROJECTS.getKey());
  331. dbTester.organizations().setDefaultTemplates(organization, projectPermissionTemplate.getUuid(), null, null);
  332. underTest.applyDefault(session, organization.getUuid(), application, null);
  333. assertThat(selectProjectPermissionsOfGroup(organization, group, application)).containsOnly(PROVISION_PROJECTS.getKey());
  334. }
  335. @Test
  336. public void apply_permission_template() {
  337. OrganizationDto organization = dbTester.organizations().insert();
  338. UserDto user = dbTester.users().insertUser();
  339. ComponentDto project = dbTester.components().insertPrivateProject(organization);
  340. GroupDto adminGroup = dbTester.users().insertGroup(organization);
  341. GroupDto userGroup = dbTester.users().insertGroup(organization);
  342. dbTester.users().insertPermissionOnGroup(adminGroup, "admin");
  343. dbTester.users().insertPermissionOnGroup(userGroup, "user");
  344. dbTester.users().insertPermissionOnUser(organization, user, "admin");
  345. PermissionTemplateDto permissionTemplate = dbTester.permissionTemplates().insertTemplate(organization);
  346. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, adminGroup, "admin");
  347. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, adminGroup, "issueadmin");
  348. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, userGroup, "user");
  349. dbTester.permissionTemplates().addGroupToTemplate(permissionTemplate, userGroup, "codeviewer");
  350. dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, "user");
  351. dbTester.permissionTemplates().addAnyoneToTemplate(permissionTemplate, "codeviewer");
  352. dbTester.permissionTemplates().addUserToTemplate(permissionTemplate, user, "admin");
  353. assertThat(selectProjectPermissionsOfGroup(organization, adminGroup, project)).isEmpty();
  354. assertThat(selectProjectPermissionsOfGroup(organization, userGroup, project)).isEmpty();
  355. assertThat(selectProjectPermissionsOfGroup(organization, null, project)).isEmpty();
  356. assertThat(selectProjectPermissionsOfUser(user, project)).isEmpty();
  357. underTest.applyAndCommit(session, permissionTemplate, singletonList(project));
  358. assertThat(selectProjectPermissionsOfGroup(organization, adminGroup, project)).containsOnly("admin", "issueadmin");
  359. assertThat(selectProjectPermissionsOfGroup(organization, userGroup, project)).containsOnly("user", "codeviewer");
  360. assertThat(selectProjectPermissionsOfGroup(organization, null, project)).isEmpty();
  361. assertThat(selectProjectPermissionsOfUser(user, project)).containsOnly("admin");
  362. }
  363. private List<String> selectProjectPermissionsOfGroup(OrganizationDto organizationDto, @Nullable GroupDto groupDto, ComponentDto project) {
  364. return dbTester.getDbClient().groupPermissionDao().selectProjectPermissionsOfGroup(session,
  365. organizationDto.getUuid(), groupDto != null ? groupDto.getId() : null, project.getId());
  366. }
  367. private List<String> selectProjectPermissionsOfUser(UserDto userDto, ComponentDto project) {
  368. return dbTester.getDbClient().userPermissionDao().selectProjectPermissionsOfUser(session,
  369. userDto.getId(), project.getId());
  370. }
  371. @Test
  372. public void would_user_have_scan_permission_with_default_permission_template() {
  373. OrganizationDto organization = dbTester.organizations().insert();
  374. GroupDto group = dbTester.users().insertGroup(organization);
  375. UserDto user = dbTester.users().insertUser();
  376. dbTester.users().insertMember(group, user);
  377. PermissionTemplateDto template = templateDb.insertTemplate(organization);
  378. dbTester.organizations().setDefaultTemplates(template, null, null);
  379. templateDb.addProjectCreatorToTemplate(template.getId(), SCAN_EXECUTION);
  380. templateDb.addUserToTemplate(template.getId(), user.getId(), UserRole.USER);
  381. templateDb.addGroupToTemplate(template.getId(), group.getId(), UserRole.CODEVIEWER);
  382. templateDb.addGroupToTemplate(template.getId(), null, UserRole.ISSUE_ADMIN);
  383. // authenticated user
  384. checkWouldUserHaveScanPermission(organization, user.getId(), true);
  385. // anonymous user
  386. checkWouldUserHaveScanPermission(organization, null, false);
  387. }
  388. @Test
  389. public void would_user_have_scan_permission_with_unknown_default_permission_template() {
  390. dbTester.organizations().setDefaultTemplates(dbTester.getDefaultOrganization(), "UNKNOWN_TEMPLATE_UUID", null, null);
  391. checkWouldUserHaveScanPermission(dbTester.getDefaultOrganization(), null, false);
  392. }
  393. @Test
  394. public void would_user_have_scan_permission_with_empty_template() {
  395. PermissionTemplateDto template = templateDb.insertTemplate(dbTester.getDefaultOrganization());
  396. dbTester.organizations().setDefaultTemplates(template, null, null);
  397. checkWouldUserHaveScanPermission(dbTester.getDefaultOrganization(), null, false);
  398. }
  399. private void checkWouldUserHaveScanPermission(OrganizationDto organization, @Nullable Integer userId, boolean expectedResult) {
  400. assertThat(underTest.wouldUserHaveScanPermissionWithDefaultTemplate(session, organization.getUuid(), userId, "PROJECT_KEY", Qualifiers.PROJECT))
  401. .isEqualTo(expectedResult);
  402. }
  403. }