diff --git a/src/prerna/auth/utils/AbstractSecurityUtils.java b/src/prerna/auth/utils/AbstractSecurityUtils.java index b022a35041..b2ba8ec8c4 100644 --- a/src/prerna/auth/utils/AbstractSecurityUtils.java +++ b/src/prerna/auth/utils/AbstractSecurityUtils.java @@ -72,6 +72,7 @@ import prerna.engine.api.IHeadersDataRow; import prerna.engine.api.IRDBMSEngine; import prerna.engine.api.IRawSelectWrapper; +import prerna.project.api.IProject; import prerna.query.querystruct.SelectQueryStruct; import prerna.query.querystruct.filters.SimpleQueryFilter; import prerna.query.querystruct.selectors.QueryColumnSelector; @@ -100,6 +101,16 @@ public abstract class AbstractSecurityUtils { static boolean adminOnlyProjectAddAccess = false; static boolean adminOnlyProjectSetPublic = false; static boolean adminOnlyProjectSetDiscoverable = false; + static boolean adminOnlyWorkspaceAdd = false; + static boolean adminOnlyWorkspaceDelete = false; + static boolean adminOnlyWorkspaceAddAccess = false; + static boolean adminOnlyWorkspaceSetPublic = false; + static boolean adminOnlyWorkspaceSetDiscoverable = false; + static boolean adminOnlySkillAdd = false; + static boolean adminOnlySkillDelete = false; + static boolean adminOnlySkillAddAccess = false; + static boolean adminOnlySkillSetPublic = false; + static boolean adminOnlySkillSetDiscoverable = false; static boolean adminOnlyDatabaseAdd = false; static boolean adminOnlyDatabaseDelete = false; @@ -211,6 +222,16 @@ public static void loadSecurityDatabase() throws Exception { adminOnlyProjectAddAccess = Utility.getApplicationAdminOnlyProjectAddAccess(); adminOnlyProjectSetPublic = Utility.getApplicationAdminOnlyProjectSetPublic(); adminOnlyProjectSetDiscoverable = Utility.getApplicationAdminOnlyProjectSetDiscoverable(); + adminOnlyWorkspaceAdd = Utility.getApplicationAdminOnlyWorkspaceAdd(); + adminOnlyWorkspaceDelete = Utility.getApplicationAdminOnlyWorkspaceDelete(); + adminOnlyWorkspaceAddAccess = Utility.getApplicationAdminOnlyWorkspaceAddAccess(); + adminOnlyWorkspaceSetPublic = Utility.getApplicationAdminOnlyWorkspaceSetPublic(); + adminOnlyWorkspaceSetDiscoverable = Utility.getApplicationAdminOnlyWorkspaceSetDiscoverable(); + adminOnlySkillAdd = Utility.getApplicationAdminOnlySkillAdd(); + adminOnlySkillDelete = Utility.getApplicationAdminOnlySkillDelete(); + adminOnlySkillAddAccess = Utility.getApplicationAdminOnlySkillAddAccess(); + adminOnlySkillSetPublic = Utility.getApplicationAdminOnlySkillSetPublic(); + adminOnlySkillSetDiscoverable = Utility.getApplicationAdminOnlySkillSetDiscoverable(); adminOnlyDatabaseAdd = Utility.getApplicationAdminOnlyDbAdd(); adminOnlyDatabaseDelete = Utility.getApplicationAdminOnlyDbDelete(); @@ -275,22 +296,137 @@ public static boolean adminOnlyProjectAdd() { return adminOnlyProjectAdd; } + public static boolean adminOnlyProjectAdd(IProject.PROJECT_TYPE type) { + if (IProject.PROJECT_TYPE.WORKSPACE == type) { + return adminOnlyWorkspaceAdd; + } else if (IProject.PROJECT_TYPE.SKILL == type) { + return adminOnlySkillAdd; + } + return adminOnlyProjectAdd; + } + public static boolean adminOnlyProjectDelete() { return adminOnlyProjectDelete; } + public static boolean adminOnlyProjectDelete(String projectId) { + return adminOnlyProjectDelete(getProjectTypeForAdminOnly(projectId)); + } + + public static boolean adminOnlyProjectDelete(IProject.PROJECT_TYPE type) { + if (IProject.PROJECT_TYPE.WORKSPACE == type) { + return adminOnlyWorkspaceDelete; + } else if (IProject.PROJECT_TYPE.SKILL == type) { + return adminOnlySkillDelete; + } + return adminOnlyProjectDelete; + } + public static boolean adminOnlyProjectAddAccess() { return adminOnlyProjectAddAccess; } + public static boolean adminOnlyProjectAddAccess(String projectId) { + return adminOnlyProjectAddAccess(getProjectTypeForAdminOnly(projectId)); + } + + public static boolean adminOnlyProjectAddAccess(IProject.PROJECT_TYPE type) { + if (IProject.PROJECT_TYPE.WORKSPACE == type) { + return adminOnlyWorkspaceAddAccess; + } else if (IProject.PROJECT_TYPE.SKILL == type) { + return adminOnlySkillAddAccess; + } + return adminOnlyProjectAddAccess; + } + public static boolean adminOnlyProjectSetPublic() { return adminOnlyProjectSetPublic; } + public static boolean adminOnlyProjectSetPublic(String projectId) { + return adminOnlyProjectSetPublic(getProjectTypeForAdminOnly(projectId)); + } + + public static boolean adminOnlyProjectSetPublic(IProject.PROJECT_TYPE type) { + if (IProject.PROJECT_TYPE.WORKSPACE == type) { + return adminOnlyWorkspaceSetPublic; + } else if (IProject.PROJECT_TYPE.SKILL == type) { + return adminOnlySkillSetPublic; + } + return adminOnlyProjectSetPublic; + } + public static boolean adminOnlyProjectSetDiscoverable() { return adminOnlyProjectSetDiscoverable; } + public static boolean adminOnlyProjectSetDiscoverable(String projectId) { + return adminOnlyProjectSetDiscoverable(getProjectTypeForAdminOnly(projectId)); + } + + public static boolean adminOnlyProjectSetDiscoverable(IProject.PROJECT_TYPE type) { + if (IProject.PROJECT_TYPE.WORKSPACE == type) { + return adminOnlyWorkspaceSetDiscoverable; + } else if (IProject.PROJECT_TYPE.SKILL == type) { + return adminOnlySkillSetDiscoverable; + } + return adminOnlyProjectSetDiscoverable; + } + + public static boolean adminOnlyWorkspaceAdd() { + return adminOnlyWorkspaceAdd; + } + + public static boolean adminOnlyWorkspaceDelete() { + return adminOnlyWorkspaceDelete; + } + + public static boolean adminOnlyWorkspaceAddAccess() { + return adminOnlyWorkspaceAddAccess; + } + + public static boolean adminOnlyWorkspaceSetPublic() { + return adminOnlyWorkspaceSetPublic; + } + + public static boolean adminOnlyWorkspaceSetDiscoverable() { + return adminOnlyWorkspaceSetDiscoverable; + } + + public static boolean adminOnlySkillAdd() { + return adminOnlySkillAdd; + } + + public static boolean adminOnlySkillDelete() { + return adminOnlySkillDelete; + } + + public static boolean adminOnlySkillAddAccess() { + return adminOnlySkillAddAccess; + } + + public static boolean adminOnlySkillSetPublic() { + return adminOnlySkillSetPublic; + } + + public static boolean adminOnlySkillSetDiscoverable() { + return adminOnlySkillSetDiscoverable; + } + + private static IProject.PROJECT_TYPE getProjectTypeForAdminOnly(String projectId) { + String projectType = SecurityProjectUtils.getProjectTypeForId(projectId); + if (projectType == null || projectType.trim().isEmpty()) { + return IProject.PROJECT_TYPE.INSIGHTS; + } + try { + return IProject.PROJECT_TYPE.valueOf(projectType.trim()); + } catch (IllegalArgumentException e) { + classLogger.warn("Unknown project type '{}' for project {}; applying project admin limits", projectType, + projectId); + return IProject.PROJECT_TYPE.INSIGHTS; + } + } + public static boolean adminOnlyDatabaseAdd() { return adminOnlyDatabaseAdd; } diff --git a/src/prerna/engine/impl/model/inferencetracking/reactors/workspaces/DeleteWorkspaceReactor.java b/src/prerna/engine/impl/model/inferencetracking/reactors/workspaces/DeleteWorkspaceReactor.java index 739a9f4348..a36ba97e2a 100644 --- a/src/prerna/engine/impl/model/inferencetracking/reactors/workspaces/DeleteWorkspaceReactor.java +++ b/src/prerna/engine/impl/model/inferencetracking/reactors/workspaces/DeleteWorkspaceReactor.java @@ -69,7 +69,7 @@ public NounMetadata execute() { "Workspace " + workspaceId + " is a built-in system agent and cannot be deleted"); } - if (AbstractSecurityUtils.adminOnlyProjectDelete()) { + if (AbstractSecurityUtils.adminOnlyWorkspaceDelete()) { throwFunctionalityOnlyExposedForAdminsError(); } diff --git a/src/prerna/project/impl/ProjectHelper.java b/src/prerna/project/impl/ProjectHelper.java index 8ea5a50bbd..1014b1375d 100644 --- a/src/prerna/project/impl/ProjectHelper.java +++ b/src/prerna/project/impl/ProjectHelper.java @@ -168,7 +168,7 @@ public static IProject generateNewProject(String projectId, String projectName, AbstractReactor.throwUserNotPublisherError(); } - if (AbstractSecurityUtils.adminOnlyProjectAdd() && !SecurityAdminUtils.userIsAdmin(user)) { + if (AbstractSecurityUtils.adminOnlyProjectAdd(projectType) && !SecurityAdminUtils.userIsAdmin(user)) { AbstractReactor.throwFunctionalityOnlyExposedForAdminsError(); } diff --git a/src/prerna/reactor/agent/skill/DeleteSkillReactor.java b/src/prerna/reactor/agent/skill/DeleteSkillReactor.java index 3b97de8735..2503bfc1b3 100644 --- a/src/prerna/reactor/agent/skill/DeleteSkillReactor.java +++ b/src/prerna/reactor/agent/skill/DeleteSkillReactor.java @@ -90,7 +90,7 @@ public NounMetadata execute() { throw new IllegalArgumentException("skillId is required"); } - if (AbstractSecurityUtils.adminOnlyProjectDelete()) { + if (AbstractSecurityUtils.adminOnlySkillDelete()) { throwFunctionalityOnlyExposedForAdminsError(); } diff --git a/src/prerna/reactor/project/UploadProjectAppReactor.java b/src/prerna/reactor/project/UploadProjectAppReactor.java index f825c96db2..c44e0bc73f 100644 --- a/src/prerna/reactor/project/UploadProjectAppReactor.java +++ b/src/prerna/reactor/project/UploadProjectAppReactor.java @@ -123,17 +123,6 @@ public NounMetadata execute() { throwUserNotPublisherError(); } - if (AbstractSecurityUtils.adminOnlyProjectAdd() && !SecurityAdminUtils.userIsAdmin(user)) { - AbstractReactor.throwFunctionalityOnlyExposedForAdminsError(); - } - - if (global && (AbstractSecurityUtils.adminOnlyProjectSetPublic() && !SecurityAdminUtils.userIsAdmin(user))) { - SemossPixelException exception = new SemossPixelException( - NounMetadata.getErrorNounMessage("User can upload an app but cannot make the app public")); - exception.setContinueThreadOfExecution(false); - throw exception; - } - // creating a temp folder to unzip project folder and smss String randomIdAsDir = UUID.randomUUID().toString(); String randomTempUnzipFolderPath = this.insight.getInsightFolder() + DIR_SEPARATOR + randomIdAsDir; @@ -144,6 +133,7 @@ public NounMetadata execute() { List fileList = new ArrayList<>(); String smssFileLoc = null; File smssFile = null; + Properties projectProperties = null; // unzip files to temp project folder boolean error = false; try { @@ -174,6 +164,21 @@ public NounMetadata execute() { if (smssFileLoc == null) { throw new SemossPixelException("Unable to find " + Constants.SEMOSS_EXTENSION + " file", false); } + + projectProperties = Utility.loadProperties(smssFileLoc); + String projectTypeString = projectProperties.getProperty(Constants.PROJECT_ENUM_TYPE); + IProject.PROJECT_TYPE projectType = projectTypeString == null ? IProject.PROJECT_TYPE.INSIGHTS + : IProject.PROJECT_TYPE.valueOf(projectTypeString.trim()); + if (AbstractSecurityUtils.adminOnlyProjectAdd(projectType) && !SecurityAdminUtils.userIsAdmin(user)) { + AbstractReactor.throwFunctionalityOnlyExposedForAdminsError(); + } + if (global && AbstractSecurityUtils.adminOnlyProjectSetPublic(projectType) + && !SecurityAdminUtils.userIsAdmin(user)) { + SemossPixelException exception = new SemossPixelException( + NounMetadata.getErrorNounMessage("User can upload an app but cannot make the app public")); + exception.setContinueThreadOfExecution(false); + throw exception; + } } catch (SemossPixelException e) { error = true; throw e; @@ -200,7 +205,7 @@ public NounMetadata execute() { boolean projectAddedToDIHelper = false; try { logger.info(step + ") Reading smss"); - Properties prop = Utility.loadProperties(smssFileLoc); + Properties prop = projectProperties; projectId = prop.getProperty(Constants.PROJECT); projectName = Utility.normalizePath(prop.getProperty(Constants.PROJECT_ALIAS)); @@ -406,7 +411,7 @@ protected boolean deleteIfExisting() { } /** - * + * * @param fileToDelete */ private void cleanUpFolders(File... fileToDelete) { @@ -445,4 +450,4 @@ protected String getDescriptionForKey(String key) { return super.getDescriptionForKey(key); } -} \ No newline at end of file +} diff --git a/src/prerna/reactor/project/UploadProjectReactor.java b/src/prerna/reactor/project/UploadProjectReactor.java index 7c381b8c0d..bb85f74b85 100644 --- a/src/prerna/reactor/project/UploadProjectReactor.java +++ b/src/prerna/reactor/project/UploadProjectReactor.java @@ -108,17 +108,6 @@ public NounMetadata execute() { throwUserNotPublisherError(); } - if (AbstractSecurityUtils.adminOnlyProjectAdd() && !SecurityAdminUtils.userIsAdmin(user)) { - AbstractReactor.throwFunctionalityOnlyExposedForAdminsError(); - } - - if (global && (AbstractSecurityUtils.adminOnlyProjectSetPublic() && !SecurityAdminUtils.userIsAdmin(user))) { - SemossPixelException exception = new SemossPixelException( - NounMetadata.getErrorNounMessage("User can upload a project but cannot make the project public")); - exception.setContinueThreadOfExecution(false); - throw exception; - } - // creating a temp folder to unzip project folder and smss String randomIdAsDir = UUID.randomUUID().toString(); String projectFolderPath = DIHelper.getInstance().getProperty(Constants.BASE_FOLDER) + DIR_SEPARATOR @@ -131,6 +120,7 @@ public NounMetadata execute() { List fileList = new ArrayList<>(); String smssFileLoc = null; File smssFile = null; + Properties projectProperties = null; // unzip files to temp project folder boolean error = false; try { @@ -161,6 +151,21 @@ public NounMetadata execute() { if (smssFileLoc == null) { throw new SemossPixelException("Unable to find " + Constants.SEMOSS_EXTENSION + " file", false); } + + projectProperties = Utility.loadProperties(smssFileLoc); + String projectTypeString = projectProperties.getProperty(Constants.PROJECT_ENUM_TYPE); + IProject.PROJECT_TYPE projectType = projectTypeString == null ? IProject.PROJECT_TYPE.INSIGHTS + : IProject.PROJECT_TYPE.valueOf(projectTypeString.trim()); + if (AbstractSecurityUtils.adminOnlyProjectAdd(projectType) && !SecurityAdminUtils.userIsAdmin(user)) { + AbstractReactor.throwFunctionalityOnlyExposedForAdminsError(); + } + if (global && AbstractSecurityUtils.adminOnlyProjectSetPublic(projectType) + && !SecurityAdminUtils.userIsAdmin(user)) { + SemossPixelException exception = new SemossPixelException(NounMetadata + .getErrorNounMessage("User can upload a project but cannot make the project public")); + exception.setContinueThreadOfExecution(false); + throw exception; + } } catch (SemossPixelException e) { error = true; throw e; @@ -183,7 +188,7 @@ public NounMetadata execute() { boolean projectAddedToDIHelper = false; try { logger.info("{}) Reading smss", step); - Properties prop = Utility.loadProperties(smssFileLoc); + Properties prop = projectProperties; projectId = prop.getProperty(Constants.PROJECT); projectName = prop.getProperty(Constants.PROJECT_ALIAS); diff --git a/src/prerna/reactor/utils/DeleteProjectReactor.java b/src/prerna/reactor/utils/DeleteProjectReactor.java index f2c1256dfb..75ef1e518c 100644 --- a/src/prerna/reactor/utils/DeleteProjectReactor.java +++ b/src/prerna/reactor/utils/DeleteProjectReactor.java @@ -74,7 +74,7 @@ public NounMetadata execute() { projectId = SecurityProjectUtils.testUserProjectIdForAlias(this.insight.getUser(), projectId); boolean isAdmin = SecurityAdminUtils.userIsAdmin(user); if (!isAdmin) { - if (AbstractSecurityUtils.adminOnlyProjectDelete()) { + if (AbstractSecurityUtils.adminOnlyProjectDelete(projectId)) { throwFunctionalityOnlyExposedForAdminsError(); } diff --git a/src/prerna/util/Constants.java b/src/prerna/util/Constants.java index 364da3b792..8194109474 100644 --- a/src/prerna/util/Constants.java +++ b/src/prerna/util/Constants.java @@ -594,6 +594,16 @@ public class Constants { public static final String ADMIN_ONLY_PROJECT_ADD_ACCESS = "ADMIN_ONLY_PROJECT_ADD_ACCESS"; public static final String ADMIN_ONLY_PROJECT_SET_PUBLIC = "ADMIN_ONLY_PROJECT_SET_PUBLIC"; public static final String ADMIN_ONLY_PROJECT_SET_DISCOVERABLE = "ADMIN_ONLY_PROJECT_SET_DISCOVERABLE"; + public static final String ADMIN_ONLY_WORKSPACE_ADD = "ADMIN_ONLY_WORKSPACE_ADD"; + public static final String ADMIN_ONLY_WORKSPACE_DELETE = "ADMIN_ONLY_WORKSPACE_DELETE"; + public static final String ADMIN_ONLY_WORKSPACE_ADD_ACCESS = "ADMIN_ONLY_WORKSPACE_ADD_ACCESS"; + public static final String ADMIN_ONLY_WORKSPACE_SET_PUBLIC = "ADMIN_ONLY_WORKSPACE_SET_PUBLIC"; + public static final String ADMIN_ONLY_WORKSPACE_SET_DISCOVERABLE = "ADMIN_ONLY_WORKSPACE_SET_DISCOVERABLE"; + public static final String ADMIN_ONLY_SKILL_ADD = "ADMIN_ONLY_SKILL_ADD"; + public static final String ADMIN_ONLY_SKILL_DELETE = "ADMIN_ONLY_SKILL_DELETE"; + public static final String ADMIN_ONLY_SKILL_ADD_ACCESS = "ADMIN_ONLY_SKILL_ADD_ACCESS"; + public static final String ADMIN_ONLY_SKILL_SET_PUBLIC = "ADMIN_ONLY_SKILL_SET_PUBLIC"; + public static final String ADMIN_ONLY_SKILL_SET_DISCOVERABLE = "ADMIN_ONLY_SKILL_SET_DISCOVERABLE"; public static final String ADMIN_ONLY_DB_ADD = "ADMIN_ONLY_DB_ADD"; public static final String ADMIN_ONLY_DB_DELETE = "ADMIN_ONLY_DB_DELETE"; diff --git a/src/prerna/util/Utility.java b/src/prerna/util/Utility.java index cc5e0a72ef..8731a9e0e1 100644 --- a/src/prerna/util/Utility.java +++ b/src/prerna/util/Utility.java @@ -3217,6 +3217,46 @@ public static boolean getApplicationAdminOnlyProjectSetDiscoverable() { return Boolean.parseBoolean(boolString); } + public static boolean getApplicationAdminOnlyWorkspaceAdd() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_WORKSPACE_ADD)); + } + + public static boolean getApplicationAdminOnlyWorkspaceDelete() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_WORKSPACE_DELETE)); + } + + public static boolean getApplicationAdminOnlyWorkspaceAddAccess() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_WORKSPACE_ADD_ACCESS)); + } + + public static boolean getApplicationAdminOnlyWorkspaceSetPublic() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_WORKSPACE_SET_PUBLIC)); + } + + public static boolean getApplicationAdminOnlyWorkspaceSetDiscoverable() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_WORKSPACE_SET_DISCOVERABLE)); + } + + public static boolean getApplicationAdminOnlySkillAdd() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_SKILL_ADD)); + } + + public static boolean getApplicationAdminOnlySkillDelete() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_SKILL_DELETE)); + } + + public static boolean getApplicationAdminOnlySkillAddAccess() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_SKILL_ADD_ACCESS)); + } + + public static boolean getApplicationAdminOnlySkillSetPublic() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_SKILL_SET_PUBLIC)); + } + + public static boolean getApplicationAdminOnlySkillSetDiscoverable() { + return Boolean.parseBoolean(Utility.getDIHelperProperty(Constants.ADMIN_ONLY_SKILL_SET_DISCOVERABLE)); + } + /** * Determine if for this instance only the admin can share insight * diff --git a/test/prerna/auth/utils/AbstractSecurityUtilsUnitTests.java b/test/prerna/auth/utils/AbstractSecurityUtilsUnitTests.java index 2db46d073e..9771909b8e 100644 --- a/test/prerna/auth/utils/AbstractSecurityUtilsUnitTests.java +++ b/test/prerna/auth/utils/AbstractSecurityUtilsUnitTests.java @@ -60,6 +60,7 @@ import prerna.date.SemossDate; import prerna.engine.api.IEngine; import prerna.engine.api.IRDBMSEngine; +import prerna.project.api.IProject; import prerna.query.querystruct.SelectQueryStruct; import prerna.query.querystruct.selectors.QueryColumnSelector; import prerna.util.Constants; @@ -96,6 +97,16 @@ void testDefaultVariables() { assertFalse(AbstractSecurityUtils.adminOnlyProjectAddAccess()); assertFalse(AbstractSecurityUtils.adminOnlyProjectSetPublic()); assertFalse(AbstractSecurityUtils.adminOnlyProjectSetDiscoverable()); + assertFalse(AbstractSecurityUtils.adminOnlyWorkspaceAdd()); + assertFalse(AbstractSecurityUtils.adminOnlyWorkspaceDelete()); + assertFalse(AbstractSecurityUtils.adminOnlyWorkspaceAddAccess()); + assertFalse(AbstractSecurityUtils.adminOnlyWorkspaceSetPublic()); + assertFalse(AbstractSecurityUtils.adminOnlyWorkspaceSetDiscoverable()); + assertFalse(AbstractSecurityUtils.adminOnlySkillAdd()); + assertFalse(AbstractSecurityUtils.adminOnlySkillDelete()); + assertFalse(AbstractSecurityUtils.adminOnlySkillAddAccess()); + assertFalse(AbstractSecurityUtils.adminOnlySkillSetPublic()); + assertFalse(AbstractSecurityUtils.adminOnlySkillSetDiscoverable()); assertFalse(AbstractSecurityUtils.adminOnlyDatabaseAdd()); assertFalse(AbstractSecurityUtils.adminOnlyDatabaseDelete()); assertFalse(AbstractSecurityUtils.adminOnlyDatabaseAddAccess()); @@ -129,6 +140,58 @@ void testDefaultVariables() { assertFalse(AbstractSecurityUtils.adminOnlyInsightShare()); } + @Test + void testAdminOnlyProjectFlagsRouteByProjectType() { + AbstractSecurityUtils.adminOnlyProjectAdd = true; + AbstractSecurityUtils.adminOnlyProjectDelete = false; + AbstractSecurityUtils.adminOnlyProjectAddAccess = true; + AbstractSecurityUtils.adminOnlyProjectSetPublic = false; + AbstractSecurityUtils.adminOnlyProjectSetDiscoverable = true; + AbstractSecurityUtils.adminOnlyWorkspaceAdd = false; + AbstractSecurityUtils.adminOnlyWorkspaceDelete = true; + AbstractSecurityUtils.adminOnlyWorkspaceAddAccess = false; + AbstractSecurityUtils.adminOnlyWorkspaceSetPublic = true; + AbstractSecurityUtils.adminOnlyWorkspaceSetDiscoverable = false; + AbstractSecurityUtils.adminOnlySkillAdd = true; + AbstractSecurityUtils.adminOnlySkillDelete = true; + AbstractSecurityUtils.adminOnlySkillAddAccess = false; + AbstractSecurityUtils.adminOnlySkillSetPublic = false; + AbstractSecurityUtils.adminOnlySkillSetDiscoverable = true; + + try { + assertAdminOnlyProjectFlags(IProject.PROJECT_TYPE.BLOCKS, true, false, true, false, true); + assertAdminOnlyProjectFlags(IProject.PROJECT_TYPE.CODE, true, false, true, false, true); + assertAdminOnlyProjectFlags(IProject.PROJECT_TYPE.INSIGHTS, true, false, true, false, true); + assertAdminOnlyProjectFlags(IProject.PROJECT_TYPE.WORKSPACE, false, true, false, true, false); + assertAdminOnlyProjectFlags(IProject.PROJECT_TYPE.SKILL, true, true, false, false, true); + } finally { + AbstractSecurityUtils.adminOnlyProjectAdd = false; + AbstractSecurityUtils.adminOnlyProjectDelete = false; + AbstractSecurityUtils.adminOnlyProjectAddAccess = false; + AbstractSecurityUtils.adminOnlyProjectSetPublic = false; + AbstractSecurityUtils.adminOnlyProjectSetDiscoverable = false; + AbstractSecurityUtils.adminOnlyWorkspaceAdd = false; + AbstractSecurityUtils.adminOnlyWorkspaceDelete = false; + AbstractSecurityUtils.adminOnlyWorkspaceAddAccess = false; + AbstractSecurityUtils.adminOnlyWorkspaceSetPublic = false; + AbstractSecurityUtils.adminOnlyWorkspaceSetDiscoverable = false; + AbstractSecurityUtils.adminOnlySkillAdd = false; + AbstractSecurityUtils.adminOnlySkillDelete = false; + AbstractSecurityUtils.adminOnlySkillAddAccess = false; + AbstractSecurityUtils.adminOnlySkillSetPublic = false; + AbstractSecurityUtils.adminOnlySkillSetDiscoverable = false; + } + } + + private static void assertAdminOnlyProjectFlags(IProject.PROJECT_TYPE type, boolean add, boolean delete, + boolean addAccess, boolean setPublic, boolean setDiscoverable) { + assertEquals(add, AbstractSecurityUtils.adminOnlyProjectAdd(type)); + assertEquals(delete, AbstractSecurityUtils.adminOnlyProjectDelete(type)); + assertEquals(addAccess, AbstractSecurityUtils.adminOnlyProjectAddAccess(type)); + assertEquals(setPublic, AbstractSecurityUtils.adminOnlyProjectSetPublic(type)); + assertEquals(setDiscoverable, AbstractSecurityUtils.adminOnlyProjectSetDiscoverable(type)); + } + @Test void testAdminOnlyEngineAdd_EngineId() { User user = UnitTestSecurityAuthUtils.createUser("admin", true);