diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java index dd512e5371..a726c4d535 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java @@ -19,6 +19,7 @@ package io.cloudbeaver.model.rm.local; import io.cloudbeaver.DBWConstants; import io.cloudbeaver.VirtualProjectImpl; import io.cloudbeaver.model.rm.RMUtils; +import io.cloudbeaver.service.security.SMUtils; import io.cloudbeaver.service.sql.WebSQLConstants; import io.cloudbeaver.utils.WebAppUtils; import org.eclipse.core.runtime.IPath; @@ -172,20 +173,24 @@ public class LocalResourceController implements RMController { switch (projectType) { case GLOBAL: - return credentialsProvider.hasPermission(DBWConstants.PERMISSION_ADMIN) - ? Set.of(RMProjectPermission.RESOURCE_EDIT, RMProjectPermission.DATA_SOURCES_EDIT) + return SMUtils.isRMAdmin(credentialsProvider) + ? Set.of(RMProjectPermission.PROJECT_ADMIN) : Set.of(RMProjectPermission.RESOURCE_VIEW, RMProjectPermission.DATA_SOURCES_VIEW); case SHARED: - if(projectId == null) { + if (projectId == null) { throw new DBException("Project id required"); } + if (SMUtils.isRMAdmin(credentialsProvider)) { + return Set.of(RMProjectPermission.PROJECT_ADMIN); + } + return smController.getObjectPermissions(activeUserCreds.getUserId(), projectId, SMObjects.PROJECT) .getPermissions() .stream() .map(RMProjectPermission::fromPermission) .collect(Collectors.toSet()); case USER: - return Set.of(RMProjectPermission.RESOURCE_EDIT, RMProjectPermission.DATA_SOURCES_EDIT); + return Set.of(RMProjectPermission.RESOURCE_EDIT, RMProjectPermission.DATA_SOURCES_EDIT); default: throw new DBException("Unknown project type:" + projectType); } diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/service/security/SMUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/service/security/SMUtils.java index a613161bac..e404182ade 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/service/security/SMUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/service/security/SMUtils.java @@ -7,6 +7,7 @@ import io.cloudbeaver.registry.WebServiceDescriptor; import io.cloudbeaver.registry.WebServiceRegistry; import io.cloudbeaver.service.admin.AdminPermissionInfo; import org.jkiss.code.NotNull; +import org.jkiss.dbeaver.model.auth.SMCredentialsProvider; import org.jkiss.dbeaver.model.rm.RMConstants; import org.jkiss.dbeaver.model.security.SMConstants; @@ -14,11 +15,11 @@ import java.util.ArrayList; import java.util.List; public class SMUtils { - public static boolean isAdmin(WebSession webSession) { + public static boolean isAdmin(SMCredentialsProvider webSession) { return webSession.hasPermission(DBWConstants.PERMISSION_ADMIN); } - public static boolean isRMAdmin(WebSession webSession) { + public static boolean isRMAdmin(SMCredentialsProvider webSession) { return isAdmin(webSession) || webSession.hasPermission(RMConstants.PERMISSION_RM_ADMIN); }