Skip to content

Commit

Permalink
Use the methods UserSession accepting OrganizationPermission param
Browse files Browse the repository at this point in the history
  • Loading branch information
Simon Brandhof committed Feb 22, 2017
1 parent d5f2c20 commit 456f466
Show file tree
Hide file tree
Showing 102 changed files with 380 additions and 373 deletions.
Expand Up @@ -87,12 +87,12 @@ public boolean hasOrganizationPermission(String organizationUuid, String permiss
} }


@Override @Override
public boolean hasPermission(OrganizationPermission permission, OrganizationDto organization) { public UserSession checkOrganizationPermission(String organizationUuid, String permission) {
throw notImplemented(); throw notImplemented();
} }


@Override @Override
public UserSession checkOrganizationPermission(String organizationUuid, String permission) { public boolean hasPermission(OrganizationPermission permission, OrganizationDto organization) {
throw notImplemented(); throw notImplemented();
} }


Expand Down
Expand Up @@ -38,6 +38,7 @@
import org.sonar.scanner.protocol.input.ProjectRepositories; import org.sonar.scanner.protocol.input.ProjectRepositories;
import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Lists.newArrayList;
Expand Down Expand Up @@ -68,7 +69,7 @@ public ProjectRepositories load(ProjectDataQuery query) {
} }


boolean hasScanPerm = userSession.hasComponentPermission(SCAN_EXECUTION, module) || boolean hasScanPerm = userSession.hasComponentPermission(SCAN_EXECUTION, module) ||
userSession.hasOrganizationPermission(module.getOrganizationUuid(), SCAN_EXECUTION); userSession.hasPermission(OrganizationPermission.SCAN, module.getOrganizationUuid());
boolean hasBrowsePerm = userSession.hasComponentPermission(USER, module); boolean hasBrowsePerm = userSession.hasComponentPermission(USER, module);
checkPermission(query.isIssuesMode(), hasScanPerm, hasBrowsePerm); checkPermission(query.isIssuesMode(), hasScanPerm, hasBrowsePerm);


Expand Down
Expand Up @@ -38,12 +38,12 @@
import org.sonar.db.ce.CeActivityDto; import org.sonar.db.ce.CeActivityDto;
import org.sonar.db.ce.CeQueueDto; import org.sonar.db.ce.CeQueueDto;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
import org.sonar.server.ws.WsUtils; import org.sonar.server.ws.WsUtils;
import org.sonarqube.ws.WsCe; import org.sonarqube.ws.WsCe;


import static org.sonar.core.permission.GlobalPermissions.SCAN_EXECUTION; import static org.sonar.core.permission.GlobalPermissions.SCAN_EXECUTION;
import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException; import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;
import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonar.server.ws.WsUtils.writeProtobuf;


Expand Down Expand Up @@ -118,8 +118,8 @@ private Optional<ComponentDto> loadComponent(DbSession dbSession, @Nullable Stri
private void checkPermission(Optional<ComponentDto> component) { private void checkPermission(Optional<ComponentDto> component) {
if (component.isPresent()) { if (component.isPresent()) {
String orgUuid = component.get().getOrganizationUuid(); String orgUuid = component.get().getOrganizationUuid();
if (!userSession.hasOrganizationPermission(orgUuid, SYSTEM_ADMIN) && if (!userSession.hasPermission(OrganizationPermission.ADMINISTER, orgUuid) &&
!userSession.hasOrganizationPermission(orgUuid, SCAN_EXECUTION) && !userSession.hasPermission(OrganizationPermission.SCAN, orgUuid) &&
!userSession.hasComponentPermission(SCAN_EXECUTION, component.get())) { !userSession.hasComponentPermission(SCAN_EXECUTION, component.get())) {
throw insufficientPrivilegesException(); throw insufficientPrivilegesException();
} }
Expand Down
Expand Up @@ -37,12 +37,12 @@
import org.sonar.server.component.ComponentUpdater; import org.sonar.server.component.ComponentUpdater;
import org.sonar.server.component.NewComponent; import org.sonar.server.component.NewComponent;
import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.permission.PermissionTemplateService; import org.sonar.server.permission.PermissionTemplateService;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import static java.lang.String.format; import static java.lang.String.format;
import static org.sonar.core.permission.GlobalPermissions.PROVISIONING;
import static org.sonar.core.permission.GlobalPermissions.SCAN_EXECUTION; import static org.sonar.core.permission.GlobalPermissions.SCAN_EXECUTION;
import static org.sonar.server.component.NewComponent.newComponentBuilder; import static org.sonar.server.component.NewComponent.newComponentBuilder;
import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException; import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;
Expand Down Expand Up @@ -75,7 +75,7 @@ public CeTask submit(String organizationKey, String projectKey, @Nullable String
OrganizationDto organizationDto = getOrganizationDtoOrFail(dbSession, organizationKey); OrganizationDto organizationDto = getOrganizationDtoOrFail(dbSession, organizationKey);
Optional<ComponentDto> opt = dbClient.componentDao().selectByKey(dbSession, effectiveProjectKey); Optional<ComponentDto> opt = dbClient.componentDao().selectByKey(dbSession, effectiveProjectKey);
ensureOrganizationIsConsistent(opt, organizationDto); ensureOrganizationIsConsistent(opt, organizationDto);
ComponentDto project = opt.or(() -> createProject(dbSession, organizationDto.getUuid(), projectKey, projectBranch, projectName)); ComponentDto project = opt.or(() -> createProject(dbSession, organizationDto, projectKey, projectBranch, projectName));
checkScanPermission(project); checkScanPermission(project);
return submitReport(dbSession, reportInput, project); return submitReport(dbSession, reportInput, project);
} }
Expand All @@ -88,7 +88,7 @@ private void checkScanPermission(ComponentDto project) {
// That means that dropping the permission on the project does not have any effects // That means that dropping the permission on the project does not have any effects
// if user has still the permission on the organization // if user has still the permission on the organization
if (!userSession.hasComponentPermission(SCAN_EXECUTION, project) && if (!userSession.hasComponentPermission(SCAN_EXECUTION, project) &&
!userSession.hasOrganizationPermission(project.getOrganizationUuid(), SCAN_EXECUTION)) { !userSession.hasPermission(OrganizationPermission.SCAN, project.getOrganizationUuid())) {
throw insufficientPrivilegesException(); throw insufficientPrivilegesException();
} }
} }
Expand All @@ -106,18 +106,18 @@ private static void ensureOrganizationIsConsistent(Optional<ComponentDto> projec
} }
} }


private ComponentDto createProject(DbSession dbSession, String organizationUuid, String projectKey, @Nullable String projectBranch, @Nullable String projectName) { private ComponentDto createProject(DbSession dbSession, OrganizationDto organization, String projectKey, @Nullable String projectBranch, @Nullable String projectName) {
userSession.checkOrganizationPermission(organizationUuid, PROVISIONING); userSession.checkPermission(OrganizationPermission.PROVISION_PROJECTS, organization);
Integer userId = userSession.getUserId(); Integer userId = userSession.getUserId();


boolean wouldCurrentUserHaveScanPermission = permissionTemplateService.wouldUserHaveScanPermissionWithDefaultTemplate( boolean wouldCurrentUserHaveScanPermission = permissionTemplateService.wouldUserHaveScanPermissionWithDefaultTemplate(
dbSession, organizationUuid, userId, projectBranch, projectKey, Qualifiers.PROJECT); dbSession, organization.getUuid(), userId, projectBranch, projectKey, Qualifiers.PROJECT);
if (!wouldCurrentUserHaveScanPermission) { if (!wouldCurrentUserHaveScanPermission) {
throw insufficientPrivilegesException(); throw insufficientPrivilegesException();
} }


NewComponent newProject = newComponentBuilder() NewComponent newProject = newComponentBuilder()
.setOrganizationUuid(organizationUuid) .setOrganizationUuid(organization.getUuid())
.setKey(projectKey) .setKey(projectKey)
.setName(StringUtils.defaultIfBlank(projectName, projectKey)) .setName(StringUtils.defaultIfBlank(projectName, projectKey))
.setBranch(projectBranch) .setBranch(projectBranch)
Expand Down
Expand Up @@ -34,8 +34,8 @@
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkArgument;
import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_KEY; import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_KEY;
import static org.sonar.server.permission.OrganizationPermission.ADMINISTER;
import static org.sonar.server.ws.WsUtils.checkFoundWithOptional; import static org.sonar.server.ws.WsUtils.checkFoundWithOptional;


public class DeleteAction implements OrganizationsAction { public class DeleteAction implements OrganizationsAction {
Expand Down Expand Up @@ -90,7 +90,7 @@ public void handle(Request request, Response response) throws Exception {
if (organizationDto.isGuarded()) { if (organizationDto.isGuarded()) {
userSession.checkIsSystemAdministrator(); userSession.checkIsSystemAdministrator();
} else { } else {
userSession.checkOrganizationPermission(organizationDto.getUuid(), SYSTEM_ADMIN); userSession.checkPermission(ADMINISTER, organizationDto);
} }


deleteProjects(dbSession, organizationDto.getUuid()); deleteProjects(dbSession, organizationDto.getUuid());
Expand Down
Expand Up @@ -26,10 +26,10 @@
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.organization.OrganizationFlags; import org.sonar.server.organization.OrganizationFlags;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static java.util.Objects.requireNonNull; import static java.util.Objects.requireNonNull;
import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;


public class EnableSupportAction implements OrganizationsAction { public class EnableSupportAction implements OrganizationsAction {
private static final String ACTION = "enable_support"; private static final String ACTION = "enable_support";
Expand Down Expand Up @@ -73,7 +73,7 @@ public void handle(Request request, Response response) throws Exception {
} }


private void verifySystemAdministrator() { private void verifySystemAdministrator() {
userSession.checkLoggedIn().checkOrganizationPermission(defaultOrganizationProvider.get().getUuid(), SYSTEM_ADMIN); userSession.checkLoggedIn().checkPermission(OrganizationPermission.ADMINISTER, defaultOrganizationProvider.get().getUuid());
} }


private boolean isSupportDisabled(DbSession dbSession) { private boolean isSupportDisabled(DbSession dbSession) {
Expand Down
Expand Up @@ -25,10 +25,9 @@
import org.sonar.api.utils.text.JsonWriter; import org.sonar.api.utils.text.JsonWriter;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;

public class SearchMyOrganizationsAction implements OrganizationsAction { public class SearchMyOrganizationsAction implements OrganizationsAction {
private static final String ACTION = "search_my_organizations"; private static final String ACTION = "search_my_organizations";


Expand Down Expand Up @@ -62,7 +61,7 @@ public void handle(Request request, Response response) throws Exception {
JsonWriter jsonWriter = response.newJsonWriter()) { JsonWriter jsonWriter = response.newJsonWriter()) {
jsonWriter.beginObject(); jsonWriter.beginObject();
jsonWriter.name("organizations").beginArray(); jsonWriter.name("organizations").beginArray();
dbClient.organizationDao().selectByPermission(dbSession, userSession.getUserId(), SYSTEM_ADMIN) dbClient.organizationDao().selectByPermission(dbSession, userSession.getUserId(), OrganizationPermission.ADMINISTER.getKey())
.forEach(dto -> jsonWriter.value(dto.getKey())); .forEach(dto -> jsonWriter.value(dto.getKey()));
jsonWriter.endArray(); jsonWriter.endArray();
jsonWriter.endObject(); jsonWriter.endObject();
Expand Down
Expand Up @@ -34,12 +34,12 @@
import org.sonarqube.ws.Organizations; import org.sonarqube.ws.Organizations;


import static java.lang.String.format; import static java.lang.String.format;
import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_AVATAR_URL; import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_AVATAR_URL;
import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_DESCRIPTION; import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_DESCRIPTION;
import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_KEY; import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_KEY;
import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_NAME; import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_NAME;
import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_URL; import static org.sonar.server.organization.ws.OrganizationsWsSupport.PARAM_URL;
import static org.sonar.server.permission.OrganizationPermission.ADMINISTER;
import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonar.server.ws.WsUtils.writeProtobuf;


public class UpdateAction implements OrganizationsAction { public class UpdateAction implements OrganizationsAction {
Expand Down Expand Up @@ -93,7 +93,7 @@ public void handle(Request request, Response response) throws Exception {


OrganizationDto dto = getDto(dbSession, key); OrganizationDto dto = getDto(dbSession, key);


userSession.checkOrganizationPermission(dto.getUuid(), SYSTEM_ADMIN); userSession.checkPermission(ADMINISTER, dto);


dto.setName(updateRequest.getName().or(dto::getName)) dto.setName(updateRequest.getName().or(dto::getName))
.setDescription(updateRequest.getDescription().or(dto::getDescription)) .setDescription(updateRequest.getDescription().or(dto::getDescription))
Expand Down
Expand Up @@ -23,7 +23,6 @@
import org.sonar.api.web.UserRole; import org.sonar.api.web.UserRole;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException; import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;


public class PermissionPrivilegeChecker { public class PermissionPrivilegeChecker {
Expand All @@ -34,7 +33,7 @@ private PermissionPrivilegeChecker() {
public static void checkGlobalAdmin(UserSession userSession, String organizationUuid) { public static void checkGlobalAdmin(UserSession userSession, String organizationUuid) {
userSession userSession
.checkLoggedIn() .checkLoggedIn()
.checkOrganizationPermission(organizationUuid, SYSTEM_ADMIN); .checkPermission(OrganizationPermission.ADMINISTER, organizationUuid);
} }


/** /**
Expand All @@ -45,7 +44,7 @@ public static void checkGlobalAdmin(UserSession userSession, String organization
public static void checkProjectAdmin(UserSession userSession, String organizationUuid, Optional<ProjectId> projectId) { public static void checkProjectAdmin(UserSession userSession, String organizationUuid, Optional<ProjectId> projectId) {
userSession.checkLoggedIn(); userSession.checkLoggedIn();


if (userSession.hasOrganizationPermission(organizationUuid, SYSTEM_ADMIN)) { if (userSession.hasPermission(OrganizationPermission.ADMINISTER, organizationUuid)) {
return; return;
} }


Expand Down
Expand Up @@ -25,14 +25,14 @@
import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
import org.sonar.db.organization.OrganizationDto; import org.sonar.db.organization.OrganizationDto;
import org.sonar.server.component.ComponentCleanerService; import org.sonar.server.component.ComponentCleanerService;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static org.sonar.server.permission.OrganizationPermission.ADMINISTER;
import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;


public class BulkDeleteAction implements ProjectsWsAction { public class BulkDeleteAction implements ProjectsWsAction {
Expand Down Expand Up @@ -104,7 +104,7 @@ private Optional<OrganizationDto> loadOrganizationByKey(DbSession dbSession, @Nu
return Optional.empty(); return Optional.empty();
} }
OrganizationDto org = support.getOrganization(dbSession, orgKey); OrganizationDto org = support.getOrganization(dbSession, orgKey);
userSession.checkOrganizationPermission(org.getUuid(), GlobalPermissions.SYSTEM_ADMIN); userSession.checkPermission(ADMINISTER, org);
return Optional.of(org); return Optional.of(org);
} }


Expand Down
Expand Up @@ -35,8 +35,8 @@


import static java.util.Optional.ofNullable; import static java.util.Optional.ofNullable;
import static org.sonar.api.resources.Qualifiers.PROJECT; import static org.sonar.api.resources.Qualifiers.PROJECT;
import static org.sonar.core.permission.GlobalPermissions.PROVISIONING;
import static org.sonar.server.component.NewComponent.newComponentBuilder; import static org.sonar.server.component.NewComponent.newComponentBuilder;
import static org.sonar.server.permission.OrganizationPermission.PROVISION_PROJECTS;
import static org.sonar.server.project.ws.ProjectsWsSupport.PARAM_ORGANIZATION; import static org.sonar.server.project.ws.ProjectsWsSupport.PARAM_ORGANIZATION;
import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001; import static org.sonar.server.ws.KeyExamples.KEY_PROJECT_EXAMPLE_001;
import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonar.server.ws.WsUtils.writeProtobuf;
Expand Down Expand Up @@ -109,7 +109,7 @@ private CreateWsResponse doHandle(CreateRequest request) {
try (DbSession dbSession = dbClient.openSession(false)) { try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = support.getOrganization(dbSession, ofNullable(request.getOrganization()) OrganizationDto organization = support.getOrganization(dbSession, ofNullable(request.getOrganization())
.orElseGet(defaultOrganizationProvider.get()::getKey)); .orElseGet(defaultOrganizationProvider.get()::getKey));
userSession.checkOrganizationPermission(organization.getUuid(), PROVISIONING); userSession.checkPermission(PROVISION_PROJECTS, organization);


ComponentDto componentDto = componentUpdater.create(dbSession, newComponentBuilder() ComponentDto componentDto = componentUpdater.create(dbSession, newComponentBuilder()
.setOrganizationUuid(organization.getUuid()) .setOrganizationUuid(organization.getUuid())
Expand Down
Expand Up @@ -23,12 +23,12 @@
import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.api.web.UserRole; import org.sonar.api.web.UserRole;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
import org.sonar.server.component.ComponentCleanerService; import org.sonar.server.component.ComponentCleanerService;
import org.sonar.server.component.ComponentFinder; import org.sonar.server.component.ComponentFinder;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


import static org.sonar.server.component.ComponentFinder.ParamNames.PROJECT_ID_AND_PROJECT; import static org.sonar.server.component.ComponentFinder.ParamNames.PROJECT_ID_AND_PROJECT;
Expand Down Expand Up @@ -92,7 +92,7 @@ public void handle(Request request, Response response) throws Exception {


private void checkPermission(ComponentDto project) { private void checkPermission(ComponentDto project) {
if (!userSession.hasComponentPermission(UserRole.ADMIN, project)) { if (!userSession.hasComponentPermission(UserRole.ADMIN, project)) {
userSession.checkOrganizationPermission(project.getOrganizationUuid(), GlobalPermissions.SYSTEM_ADMIN); userSession.checkPermission(OrganizationPermission.ADMINISTER, project.getOrganizationUuid());
} }
} }
} }
Expand Up @@ -29,7 +29,6 @@
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.api.server.ws.WebService.Param; import org.sonar.api.server.ws.WebService.Param;
import org.sonar.api.utils.text.JsonWriter; import org.sonar.api.utils.text.JsonWriter;
import org.sonar.api.web.UserRole;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
Expand All @@ -40,6 +39,7 @@


import static com.google.common.collect.Sets.newHashSet; import static com.google.common.collect.Sets.newHashSet;
import static org.sonar.server.es.SearchOptions.MAX_LIMIT; import static org.sonar.server.es.SearchOptions.MAX_LIMIT;
import static org.sonar.server.permission.OrganizationPermission.ADMINISTER;
import static org.sonar.server.ws.WsUtils.checkFoundWithOptional; import static org.sonar.server.ws.WsUtils.checkFoundWithOptional;


public class GhostsAction implements ProjectsWsAction { public class GhostsAction implements ProjectsWsAction {
Expand Down Expand Up @@ -89,7 +89,7 @@ public void handle(Request request, Response response) throws Exception {


try (DbSession dbSession = dbClient.openSession(false)) { try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = getOrganization(dbSession, request); OrganizationDto organization = getOrganization(dbSession, request);
userSession.checkOrganizationPermission(organization.getUuid(), UserRole.ADMIN); userSession.checkPermission(ADMINISTER, organization);


long nbOfProjects = dbClient.componentDao().countGhostProjects(dbSession, organization.getUuid(), query); long nbOfProjects = dbClient.componentDao().countGhostProjects(dbSession, organization.getUuid(), query);
List<ComponentDto> projects = dbClient.componentDao().selectGhostProjects(dbSession, organization.getUuid(), query, List<ComponentDto> projects = dbClient.componentDao().selectGhostProjects(dbSession, organization.getUuid(), query,
Expand Down
Expand Up @@ -30,7 +30,6 @@
import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService;
import org.sonar.api.server.ws.WebService.Param; import org.sonar.api.server.ws.WebService.Param;
import org.sonar.api.utils.text.JsonWriter; import org.sonar.api.utils.text.JsonWriter;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.DbClient; import org.sonar.db.DbClient;
import org.sonar.db.DbSession; import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentDto; import org.sonar.db.component.ComponentDto;
Expand All @@ -41,6 +40,7 @@


import static com.google.common.collect.Sets.newHashSet; import static com.google.common.collect.Sets.newHashSet;
import static org.sonar.server.es.SearchOptions.MAX_LIMIT; import static org.sonar.server.es.SearchOptions.MAX_LIMIT;
import static org.sonar.server.permission.OrganizationPermission.PROVISION_PROJECTS;
import static org.sonar.server.project.ws.ProjectsWsSupport.PARAM_ORGANIZATION; import static org.sonar.server.project.ws.ProjectsWsSupport.PARAM_ORGANIZATION;


public class ProvisionedAction implements ProjectsWsAction { public class ProvisionedAction implements ProjectsWsAction {
Expand Down Expand Up @@ -90,7 +90,7 @@ public void handle(Request request, Response response) throws Exception {
try (DbSession dbSession = dbClient.openSession(false)) { try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = support.getOrganization(dbSession, OrganizationDto organization = support.getOrganization(dbSession,
request.getParam(PARAM_ORGANIZATION).or(defaultOrganizationProvider.get()::getKey)); request.getParam(PARAM_ORGANIZATION).or(defaultOrganizationProvider.get()::getKey));
userSession.checkOrganizationPermission(organization.getUuid(), GlobalPermissions.PROVISIONING); userSession.checkPermission(PROVISION_PROJECTS, organization);


RowBounds rowBounds = new RowBounds(options.getOffset(), options.getLimit()); RowBounds rowBounds = new RowBounds(options.getOffset(), options.getLimit());
List<ComponentDto> projects = dbClient.componentDao().selectProvisioned(dbSession, organization.getUuid(), query, QUALIFIERS_FILTER, rowBounds); List<ComponentDto> projects = dbClient.componentDao().selectProvisioned(dbSession, organization.getUuid(), query, QUALIFIERS_FILTER, rowBounds);
Expand Down
Expand Up @@ -31,6 +31,7 @@
import org.sonar.db.component.ComponentQuery; import org.sonar.db.component.ComponentQuery;
import org.sonar.db.organization.OrganizationDto; import org.sonar.db.organization.OrganizationDto;
import org.sonar.server.organization.DefaultOrganizationProvider; import org.sonar.server.organization.DefaultOrganizationProvider;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
import org.sonarqube.ws.WsProjects.SearchWsResponse; import org.sonarqube.ws.WsProjects.SearchWsResponse;
import org.sonarqube.ws.client.project.SearchWsRequest; import org.sonarqube.ws.client.project.SearchWsRequest;
Expand All @@ -39,7 +40,6 @@
import static java.util.Optional.ofNullable; import static java.util.Optional.ofNullable;
import static org.sonar.api.resources.Qualifiers.PROJECT; import static org.sonar.api.resources.Qualifiers.PROJECT;
import static org.sonar.api.resources.Qualifiers.VIEW; import static org.sonar.api.resources.Qualifiers.VIEW;
import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
import static org.sonar.server.ws.WsUtils.writeProtobuf; import static org.sonar.server.ws.WsUtils.writeProtobuf;
import static org.sonarqube.ws.WsProjects.SearchWsResponse.Component; import static org.sonarqube.ws.WsProjects.SearchWsResponse.Component;
import static org.sonarqube.ws.WsProjects.SearchWsResponse.newBuilder; import static org.sonarqube.ws.WsProjects.SearchWsResponse.newBuilder;
Expand Down Expand Up @@ -98,7 +98,7 @@ private static SearchWsRequest toSearchWsRequest(Request request) {
private SearchWsResponse doHandle(SearchWsRequest request) { private SearchWsResponse doHandle(SearchWsRequest request) {
try (DbSession dbSession = dbClient.openSession(false)) { try (DbSession dbSession = dbClient.openSession(false)) {
OrganizationDto organization = support.getOrganization(dbSession, ofNullable(request.getOrganization()).orElseGet(defaultOrganizationProvider.get()::getKey)); OrganizationDto organization = support.getOrganization(dbSession, ofNullable(request.getOrganization()).orElseGet(defaultOrganizationProvider.get()::getKey));
userSession.checkOrganizationPermission(organization.getUuid(), SYSTEM_ADMIN); userSession.checkPermission(OrganizationPermission.ADMINISTER, organization);


ComponentQuery query = buildQuery(request); ComponentQuery query = buildQuery(request);
Paging paging = buildPaging(dbSession, request, organization, query); Paging paging = buildPaging(dbSession, request, organization, query);
Expand Down
Expand Up @@ -41,10 +41,10 @@
import org.sonar.server.exceptions.Errors; import org.sonar.server.exceptions.Errors;
import org.sonar.server.exceptions.Message; import org.sonar.server.exceptions.Message;
import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.NotFoundException;
import org.sonar.server.permission.OrganizationPermission;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;
import org.sonar.server.util.Validation; import org.sonar.server.util.Validation;


import static org.sonar.core.permission.GlobalPermissions.QUALITY_GATE_ADMIN;
import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException; import static org.sonar.server.user.AbstractUserSession.insufficientPrivilegesException;


/** /**
Expand Down Expand Up @@ -248,7 +248,7 @@ private void checkIsSystemAdministrator() {
} }


private void checkProjectAdmin(ComponentDto project) { private void checkProjectAdmin(ComponentDto project) {
if (!userSession.hasOrganizationPermission(project.getOrganizationUuid(), QUALITY_GATE_ADMIN) if (!userSession.hasPermission(OrganizationPermission.ADMINISTER_QUALITY_GATES, project.getOrganizationUuid())
&& !userSession.hasComponentPermission(UserRole.ADMIN, project)) { && !userSession.hasComponentPermission(UserRole.ADMIN, project)) {
throw insufficientPrivilegesException(); throw insufficientPrivilegesException();
} }
Expand Down

0 comments on commit 456f466

Please sign in to comment.