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