diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2017-04-24 17:58:05 +0200 |
---|---|---|
committer | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2017-04-27 14:42:50 +0200 |
commit | d7ce42f81b9ce387128df86363a6fabb463fda55 (patch) | |
tree | c2584ac2f830c53f976058ee25bea6047577eeda /server/sonar-server/src | |
parent | 8250bcc84139f46b9e782b050e3b5f51e5ba4298 (diff) | |
download | sonarqube-d7ce42f81b9ce387128df86363a6fabb463fda55.tar.gz sonarqube-d7ce42f81b9ce387128df86363a6fabb463fda55.zip |
SONAR-9136 replace AnyOne by default group in default template
Diffstat (limited to 'server/sonar-server/src')
2 files changed, 59 insertions, 13 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java index 5ef341e0330..a6e9cd0d3c7 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java +++ b/server/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java @@ -21,7 +21,6 @@ package org.sonar.server.startup; import java.util.Date; import java.util.Optional; -import javax.annotation.Nullable; import org.sonar.api.security.DefaultGroups; import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Loggers; @@ -34,6 +33,8 @@ import org.sonar.db.permission.template.PermissionTemplateDto; import org.sonar.db.user.GroupDto; import org.sonar.server.organization.DefaultOrganizationProvider; +import static java.lang.String.format; + public class RegisterPermissionTemplates { private static final Logger LOG = Loggers.get(RegisterPermissionTemplates.class); @@ -84,6 +85,11 @@ public class RegisterPermissionTemplates { } private void insertDefaultGroupPermissions(DbSession dbSession, PermissionTemplateDto template) { + insertPermissionForAdministrators(dbSession, template); + insertPermissionsForDefaultGroup(dbSession, template); + } + + private void insertPermissionForAdministrators(DbSession dbSession, PermissionTemplateDto template) { Optional<GroupDto> admins = dbClient.groupDao().selectByName(dbSession, template.getOrganizationUuid(), DefaultGroups.ADMINISTRATORS); if (admins.isPresent()) { insertGroupPermission(dbSession, template, UserRole.ADMIN, admins.get()); @@ -91,16 +97,20 @@ public class RegisterPermissionTemplates { } else { LOG.error("Cannot setup default permission for group: " + DefaultGroups.ADMINISTRATORS); } - insertGroupPermission(dbSession, template, UserRole.USER, null); - insertGroupPermission(dbSession, template, UserRole.CODEVIEWER, null); } - private void insertGroupPermission(DbSession dbSession, PermissionTemplateDto template, String permission, @Nullable GroupDto group) { - if (group == null) { - dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), null, permission); - } else { - dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), group.getId(), permission); - } + private void insertPermissionsForDefaultGroup(DbSession dbSession, PermissionTemplateDto template) { + String organizationUuid = template.getOrganizationUuid(); + Integer defaultGroupId = dbClient.organizationDao().getDefaultGroupId(dbSession, organizationUuid) + .orElseThrow(() -> new IllegalStateException(format("Default group for organization %s is not defined", organizationUuid))); + GroupDto defaultGroup = Optional.ofNullable(dbClient.groupDao().selectById(dbSession, defaultGroupId)) + .orElseThrow(() -> new IllegalStateException(format("Default group with id %s for organization %s doesn't exist", defaultGroupId, organizationUuid))); + insertGroupPermission(dbSession, template, UserRole.USER, defaultGroup); + insertGroupPermission(dbSession, template, UserRole.CODEVIEWER, defaultGroup); + } + + private void insertGroupPermission(DbSession dbSession, PermissionTemplateDto template, String permission, GroupDto group) { + dbClient.permissionTemplateDao().insertGroupPermission(dbSession, template.getId(), group.getId(), permission); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java b/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java index 3a2f6ba063a..9436ff31a1b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterPermissionTemplatesTest.java @@ -24,6 +24,7 @@ import java.util.Objects; import java.util.Optional; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.sonar.api.security.DefaultGroups; import org.sonar.api.utils.System2; import org.sonar.api.utils.log.LogTester; @@ -33,6 +34,7 @@ import org.sonar.db.DbTester; import org.sonar.db.organization.DefaultTemplates; import org.sonar.db.permission.template.PermissionTemplateDto; import org.sonar.db.permission.template.PermissionTemplateGroupDto; +import org.sonar.db.user.GroupDto; import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.TestDefaultOrganizationProvider; @@ -46,12 +48,33 @@ public class RegisterPermissionTemplatesTest { public DbTester db = DbTester.create(System2.INSTANCE); @Rule public LogTester logTester = new LogTester(); + @Rule + public ExpectedException expectedException = ExpectedException.none(); private DefaultOrganizationProvider defaultOrganizationProvider = TestDefaultOrganizationProvider.from(db); private RegisterPermissionTemplates underTest = new RegisterPermissionTemplates(db.getDbClient(), defaultOrganizationProvider); @Test + public void fail_with_ISE_if_default_template_must_be_created_and_no_default_group_is_defined() { + expectedException.expect(IllegalStateException.class); + expectedException.expectMessage("Default group for organization " + db.getDefaultOrganization().getUuid() + " is not defined"); + + underTest.start(); + } + + @Test + public void fail_with_ISE_if_default_template_must_be_created_and_default_group_does_not_exist() { + setDefaultGroupId(new GroupDto().setId(22)); + + expectedException.expect(IllegalStateException.class); + expectedException.expectMessage("Default group with id 22 for organization " + db.getDefaultOrganization().getUuid() + " doesn't exist"); + + underTest.start(); + } + + @Test public void insert_default_permission_template_if_fresh_install() { + GroupDto defaultGroup = createAndSetDefaultGroup(); db.users().insertGroup(db.getDefaultOrganization(), DefaultGroups.ADMINISTRATORS); underTest.start(); @@ -63,8 +86,8 @@ public class RegisterPermissionTemplatesTest { assertThat(groupPermissions).hasSize(4); expectGroupPermission(groupPermissions, UserRole.ADMIN, DefaultGroups.ADMINISTRATORS); expectGroupPermission(groupPermissions, UserRole.ISSUE_ADMIN, DefaultGroups.ADMINISTRATORS); - expectGroupPermission(groupPermissions, UserRole.CODEVIEWER, DefaultGroups.ANYONE); - expectGroupPermission(groupPermissions, UserRole.USER, DefaultGroups.ANYONE); + expectGroupPermission(groupPermissions, UserRole.CODEVIEWER, defaultGroup.getName()); + expectGroupPermission(groupPermissions, UserRole.USER, defaultGroup.getName()); verifyDefaultTemplates(); @@ -73,6 +96,8 @@ public class RegisterPermissionTemplatesTest { @Test public void ignore_administrators_permissions_if_group_does_not_exist() { + GroupDto defaultGroup = createAndSetDefaultGroup(); + underTest.start(); PermissionTemplateDto defaultTemplate = selectTemplate(); @@ -80,8 +105,8 @@ public class RegisterPermissionTemplatesTest { List<PermissionTemplateGroupDto> groupPermissions = selectGroupPermissions(defaultTemplate); assertThat(groupPermissions).hasSize(2); - expectGroupPermission(groupPermissions, UserRole.CODEVIEWER, DefaultGroups.ANYONE); - expectGroupPermission(groupPermissions, UserRole.USER, DefaultGroups.ANYONE); + expectGroupPermission(groupPermissions, UserRole.CODEVIEWER, defaultGroup.getName()); + expectGroupPermission(groupPermissions, UserRole.USER, defaultGroup.getName()); verifyDefaultTemplates(); @@ -132,4 +157,15 @@ public class RegisterPermissionTemplatesTest { .isPresent(); assertThat(defaultTemplates.get().getProjectUuid()).isEqualTo(DEFAULT_TEMPLATE_UUID); } + + private void setDefaultGroupId(GroupDto defaultGroup) { + db.getDbClient().organizationDao().setDefaultGroupId(db.getSession(), db.getDefaultOrganization().getUuid(), defaultGroup); + db.commit(); + } + + private GroupDto createAndSetDefaultGroup() { + GroupDto res = db.users().insertGroup(db.getDefaultOrganization()); + setDefaultGroupId(res); + return res; + } } |