dbeaver/pro#1253 team edition datasets (#1364)

* dbeaver/pro#1253 Resource types mode, project permissions refactoring, GQL endpoint

* dbeaver/pro#1253 Resource type file extensions
This commit is contained in:
Serge Rider
2022-12-16 19:24:19 +03:00
committed by GitHub
parent 318c55643d
commit 8f8759586d
6 changed files with 26 additions and 11 deletions
@@ -81,7 +81,7 @@ public class RMUtils {
RMProject project = new RMProject("anonymous");
project.setId("anonymous");
project.setType(RMProjectType.USER);
project.setProjectPermissions(RMProjectPermission.DATA_SOURCES_EDIT.getAllPermissions());
project.setProjectPermissions(RMProjectPermission.DATA_SOURCES_EDIT.getAllPermissions().toArray(new String[0]));
return project;
}
}
@@ -169,7 +169,7 @@ public class LocalResourceController implements RMController {
.stream()
.map(projectPermission -> makeProjectFromPath(
sharedProjectsPath.resolve(parseProjectName(projectPermission.getObjectId()).getName()),
projectPermission.getPermissions().stream().map(RMProjectPermission::fromPermission).collect(Collectors.toSet()),
Arrays.stream(projectPermission.getPermissions()).map(RMProjectPermission::fromPermission).collect(Collectors.toSet()),
RMProjectType.SHARED, true)
)
.filter(Objects::nonNull)
@@ -193,9 +193,9 @@ public class LocalResourceController implements RMController {
throw new DBException("Project id required");
}
return getSecurityController().getObjectPermissions(activeUserCreds.getUserId(), projectId, SMObjects.PROJECT)
.getPermissions()
.stream()
String[] permissions = getSecurityController().getObjectPermissions(activeUserCreds.getUserId(), projectId, SMObjects.PROJECT)
.getPermissions();
return Arrays.stream(permissions)
.map(RMProjectPermission::fromPermission)
.collect(Collectors.toSet());
case USER:
@@ -635,9 +635,9 @@ public class LocalResourceController implements RMController {
return null;
}
Set<String> allProjectPermissions = permissions.stream()
String[] allProjectPermissions = permissions.stream()
.flatMap(rmProjectPermission -> rmProjectPermission.getAllPermissions().stream())
.collect(Collectors.toSet());
.toArray(String[]::new);
RMProject project = new RMProject();
String projectName = path.getFileName().toString();
@@ -653,11 +653,16 @@ public class LocalResourceController implements RMController {
log.error(e);
}
}
// Resource types
project.setResourceTypes(ResourceTypeRegistry.getInstance().getResourceTypes()
.stream()
.filter(ResourceTypeDescriptor::isManagable)
.map(RMResourceType::new)
.toArray(RMResourceType[]::new));
return project;
}
private Path getProjectPath(String projectId) throws DBException {
RMProjectName project = parseProjectName(projectId);
RMProjectType type = project.getType();
@@ -30,7 +30,7 @@ public class SMUtils {
RMProject project,
RMProjectPermission projectPermission
) {
return isRMAdmin(credentialsProvider) || project.getProjectPermissions().contains(projectPermission.getPermissionId());
return isRMAdmin(credentialsProvider) || project.hasProjectPermission(projectPermission.getPermissionId());
}
public static List<AdminPermissionInfo> findPermissions(@NotNull String permissionsScope) {
@@ -62,6 +62,7 @@ import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.PrefUtils;
import org.jkiss.dbeaver.utils.SystemVariablesResolver;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.StandardConstants;
@@ -863,7 +864,7 @@ public class CBApplication extends BaseWebApplication implements WebAuthApplicat
var securityController = getSecurityController();
for (DBPDataSourceContainer ds : WebServiceUtils.getGlobalDataSourceRegistry().getDataSources()) {
var datasourcePermissions = securityController.getObjectPermissions(anonymousTeamId, ds.getId(), SMObjects.DATASOURCE);
if (CommonUtils.isEmpty(datasourcePermissions.getPermissions())) {
if (ArrayUtils.isEmpty(datasourcePermissions.getPermissions())) {
securityController.setObjectPermissions(
Set.of(ds.getId()),
SMObjects.DATASOURCE,
@@ -223,7 +223,7 @@ public abstract class WebServiceBindingBase<API_TYPE extends DBWService> impleme
RMProject rmProject = project.getRmProject();
for (String reqProjectPermission : requireProjectPermissions) {
if (!rmProject.getProjectPermissions().contains(reqProjectPermission)) {
if (!rmProject.hasProjectPermission(reqProjectPermission)) {
throw new DBWebExceptionAccessDenied("Access denied");
}
}
@@ -10,6 +10,7 @@ type RMProject {
createTime: DateTime!
creator: String!
projectPermissions: [String!]!
resourceTypes: [RMResourceType!]!
}
type RMResource {
@@ -20,6 +21,14 @@ type RMResource {
properties: Object
}
type RMResourceType {
id: String!
displayName: String!
icon: String
fileExtensions: String
rootFolder: String
}
input RMSubjectProjectPermissions {
subjectId: String!
permissions: [String!]!