From 1752d61cd34afdf1ce977eb9f7f74f6727d9e585 Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Mon, 29 Jul 2019 16:17:11 +0200 Subject: [PATCH] Permissions - changed COND from varchar(255) to CLOB to save bigger conditions (JSON from filter component) --- .../permission/create_asys_permission.xml | 4 +- .../_____SYSTEMALIAS/_____SYSTEMALIAS.aod | 36 ++++----- .../entityfields/condition/stateProcess.js | 4 +- .../entityfields/condition/valueProcess.js | 1 - .../recordcontainers/jdito/onInsert.js | 8 +- process/Permission_lib/process.js | 74 +------------------ 6 files changed, 28 insertions(+), 99 deletions(-) diff --git a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permission.xml b/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permission.xml index ab5313229af..0cef84bf418 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permission.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/2019.1.4/permission/create_asys_permission.xml @@ -1,12 +1,12 @@ <?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> - <changeSet author="s.leipold" id="746f6e0c-3eab-4424-867f-4cf4fb4c45bb"> + <changeSet author="s.leipold" id="746f6e0c-3eab-4424-867f-4cf4fb4c45ba"> <createTable tableName="ASYS_PERMISSION"> <column name="ASYS_PERMISSIONID" type="CHAR(36)"> <constraints primaryKey="true" primaryKeyName="PK_ASYS_PERMISSION_ID"/> </column> <column name="ASYS_PERMISSIONSET_ID" type="CHAR(36)"/> - <column name="COND" type="VARCHAR(255)"/> + <column name="COND" type="CLOB"/> <column name="CONDTYPE" type="BOOLEAN"/> </createTable> </changeSet> diff --git a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod index 751381ea326..e796fca2499 100644 --- a/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod +++ b/aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod @@ -3214,25 +3214,25 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>PERMISSIONID</name> + <name>CONDTYPE</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="16" /> + <size v="1" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> + <notNull v="false" /> + <isUnique v="false" /> <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PERMISSIONSET_ID</name> + <name>COND</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -3242,25 +3242,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONDTYPE</name> + <name>ASYS_PERMISSIONID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="16" /> - <size v="1" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> + <notNull v="true" /> + <isUnique v="true" /> <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>COND</name> + <name>ASYS_PERMISSIONSET_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> diff --git a/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js b/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js index ad116179661..71fd7034f82 100644 --- a/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js +++ b/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js @@ -5,5 +5,7 @@ import("system.neon"); if(vars.get("$field.ACCESSTYPE") == "E") { result.string(neon.COMPONENTSTATE_DISABLED); } else { - result.string(neon.COMPONENTSTATE_EDITABLE); + if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) { + result.string(neon.COMPONENTSTATE_EDITABLE); + } } \ No newline at end of file diff --git a/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js b/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js index a7a5aae60f3..1c44df7a4b4 100644 --- a/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js +++ b/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js @@ -5,6 +5,5 @@ import("system.result"); if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.getString("$this.value") == null) { var entity = vars.get("$field.ENTITY"); - logging.log("entity: " + entity); result.string(JSON.stringify({entity: "" + entity + "", filter: {type: "group", operator: "AND", childs: []}})); } \ No newline at end of file diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js b/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js index b521f8d7182..043cefec525 100644 --- a/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js +++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js @@ -8,7 +8,6 @@ import("system.tools"); import("Permission_lib"); import("Entity_lib"); -var table, cols, vals; var alias = "_____SYSTEMALIAS"; var sqlExt = ""; var permissionid = util.getNewUUID(); @@ -46,7 +45,9 @@ if (checkInput([role, entity, accesstype, condtype, action])) { var childPermissions = PermissionUtil.getAllChildPermissions(permissionsetid); for each (var permid in childPermissions) { if (PermissionUtil.getCondType(permid) == "false") { - PermissionUtil.deletePermission(permid); + let table = "ASYS_PERMISSION"; + let cond = " ASYS_PERMISSIONID = '" + permid + "'"; + db.deleteData(table, cond, alias); // delete permission with cond type = false } } @@ -58,7 +59,6 @@ if (checkInput([role, entity, accesstype, condtype, action])) { } else { // permission doesnt exist -> insert new permission // new permissionid is needed to link actions to the permission in the next step - logging.log("onInsert cond: " + condition); permissionid = PermissionUtil.insertNewPermission(permissionsetid, condition, condtype) } @@ -86,7 +86,7 @@ function permExists(pRole, pEntity, pField, pAccesstype, pCondtype, pCondition) var sqlExt = ""; if (checkInput([pCondition])) { - sqlExt += " and COND = '" + pCondition + "'"; + sqlExt += " and COND like '%" + pCondition + "%'"; } if (checkInput([pField])) { diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js index dab7d4ce7fd..689c3577f42 100644 --- a/process/Permission_lib/process.js +++ b/process/Permission_lib/process.js @@ -266,7 +266,7 @@ PermissionUtil.getDefaultPermission = function(pPermSetId) { sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION" + " where ASYS_PERMISSIONSET_ID = '" + pPermSetId + "'" - + " and (COND is null or COND = '" + noCond + "')"; + + " and (COND is null or COND like '%" + noCond + "%')"; return db.cell(sqlStr, alias); } @@ -346,17 +346,6 @@ PermissionUtil.permSetIsEmpty = function(pPermSetId) { return false; } -/** - * Returns all PermissionSets, Permissions and PermissionActions. - * - * @result {String[]) all PermissionSets, Permissions and PermissionActions. The result can never be null. - */ -PermissionUtil.getCompleteStructure = function() { - return db.table("select ASYS_PERMISSIONSET.ENTITY_ID, ASYS_PERMISSIONSET.ROLE_ID, ASYS_PERMISSIONSET.FIELD_ID, ASYS_PERMISSIONSET.ACCESSTYPE, ASYS_PERMISSION.COND, ASYS_PERMISSION.CONDTYPE, ASYS_PERMISSIONACTION.ACTION from ASYS_PERMISSIONSET" - + " join ASYS_PERMISSION on ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID" - + " join ASYS_PERMISSIONACTION on ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID = ASYS_PERMISSION.ASYS_PERMISSIONID", alias); -} - /** * Returns all permissions of the given permission sets. * @@ -390,28 +379,6 @@ PermissionUtil.getPermissionCondType = function(pPermId) { return db.cell("select CONDTYPE from ASYS_PERMISSION where ASYS_PERMISSION.ASYS_PERMISSIONID = '" + pPermId + "'", alias); } -/** - * Checks if the given actions are already linked to the permission. - * - * @param {String} pPermId the id of the permission - * - * @param {String} pActionNew actions which have to be checked if updated - * - * @result {String[]} returns the element which is a duplicate, otherwise null - */ -PermissionUtil.containsDuplicateActions = function(pPermId, pActionNew) { - var sqlStr = "select ACTION from ASYS_PERMISSIONACTION where ASYS_PERMISSION_ID = '" + pPermId + "'"; - var actionsOld = db.array(db.COLUMN, sqlStr, alias); - var actionsNew = pActionNew.split(","); - var res = null - - res = actionsOld.filter(function(val) { - return actionsNew.indexOf(val) != -1; - }); - - return res; -} - /** * Inserts a new instance of a permission set into ASYS_PERMISSIONSET. * @@ -487,45 +454,6 @@ PermissionUtil.getCondType = function(pPerm) { return db.cell(sqlStr, alias); } -/** - * Deletes a permissionset from ASYS_PERMISSIONSET. - * - * @param {String} pPermSetId The permission set id which should be deleted, mandatory - * - * @result {Integer} returns the number of deleted records - */ -PermissionUtil.deletePermissionSet = function(pPermSetId) { - var table = "ASYS_PERMISSIONSET"; - var cond = " ASYS_PERMISSIONSETID = '" + pPermSetId + "'"; - return db.deleteData(table, cond, alias); -} - -/** - * Deletes a permission from ASYS_PERMISSION. - * - * @param {String} pPermId The permission id which should be deleted, mandatory - * - * @result {Integer} returns the number of deleted records - */ -PermissionUtil.deletePermission = function(pPermId) { - var table = "ASYS_PERMISSION"; - var cond = " ASYS_PERMISSIONID = '" + pPermId + "'"; - return db.deleteData(table, cond, alias); -} - -/** - * Deletes a permission action from ASYS_PERMISSIONACTION. - * - * @param {String} pPermActionId The permission action id which should be deleted, mandatory - * - * @result {Integer} returns the number of deleted records - */ -PermissionUtil.deletePermissionAction = function(pPermActionId) { - var table = "ASYS_PERMISSIONACTION"; - var cond = " ASYS_PERMISSIONACTIONID = '" + pPermActionId + "'"; - return db.deleteData(table, cond, alias); -} - // arrDiff calculates different elements of two arrays and returns them as array, otherwise empty array function arrDiff (arr1, arr2) { var helperArr = [], diff = []; -- GitLab