From 4edea6ea9aa63f52c3eaa92673883535e6983718 Mon Sep 17 00:00:00 2001
From: Simon Leipold <s.leipold@adito.de>
Date: Wed, 22 May 2019 13:42:28 +0200
Subject: [PATCH] Permissions - bugfixes for insert/edit/delete of permissions

---
 .../PermissionDetail_entity.aod                 |  5 ++++-
 .../accesstype/displayValueProcess.js           | 10 ++++++++++
 .../entityfields/accesstype/valueProcess.js     | 10 ++++++++++
 .../condtype/displayValueProcess.js             |  6 ------
 .../entityfields/entity/displayValueProcess.js  |  9 +++++++++
 .../entityfields/entity/valueProcess.js         | 16 +++++++++-------
 .../entityfields/role/displayValueProcess.js    | 14 ++++++++++++++
 .../entityfields/role/valueProcess.js           | 16 +++++++++-------
 .../recordcontainers/jdito/onDelete.js          | 13 +++++++------
 .../recordcontainers/jdito/onInsert.js          |  6 ++++--
 .../recordcontainers/jdito/onUpdate.js          |  3 ++-
 .../children/entityname_param/valueProcess.js   |  2 +-
 process/Permission_lib/process.js               | 17 ++++++++++++++---
 13 files changed, 93 insertions(+), 34 deletions(-)
 create mode 100644 entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js
 create mode 100644 entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js
 delete mode 100644 entity/PermissionDetail_entity/entityfields/condtype/displayValueProcess.js
 create mode 100644 entity/PermissionDetail_entity/entityfields/entity/displayValueProcess.js
 create mode 100644 entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js

diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index f0a82c5aa6..2d5c67c902 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -28,6 +28,7 @@
       <mandatory v="true" />
       <groupable v="true" />
       <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/role/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>ENTITY</name>
@@ -37,6 +38,7 @@
       <mandatory v="true" />
       <groupable v="true" />
       <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/entity/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/entity/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>FIELD</name>
@@ -56,13 +58,14 @@
       <consumer>KeywordAccessType</consumer>
       <mandatory v="true" />
       <groupable v="true" />
+      <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js</valueProcess>
+      <displayValueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>CONDTYPE</name>
       <title>Condition Type</title>
       <consumer>KeywordConditionType</consumer>
       <mandatory v="true" />
-      <displayValueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/condtype/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
       <name>PARENT</name>
diff --git a/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js b/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js
new file mode 100644
index 0000000000..9df8d712ee
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js
@@ -0,0 +1,10 @@
+//import("system.vars");
+//import("system.result");
+//
+//var field = vars.get("$field.FIELD");
+//
+//if (field != undefined && field != null && field != "") {
+//    result.string("Feld");
+//} else {
+//    result.string("");
+//}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js b/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js
new file mode 100644
index 0000000000..52f53388aa
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js
@@ -0,0 +1,10 @@
+//import("system.vars");
+//import("system.result");
+//
+//var field = vars.get("$field.FIELD");
+//
+//if (field != undefined && field != null && field != "") {
+//    result.string("F");
+//} else {
+//    result.string("");
+//}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/condtype/displayValueProcess.js b/entity/PermissionDetail_entity/entityfields/condtype/displayValueProcess.js
deleted file mode 100644
index 40f4ec0027..0000000000
--- a/entity/PermissionDetail_entity/entityfields/condtype/displayValueProcess.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import("system.result");
-import("system.vars");
-import("Keyword_lib");
-import("KeywordRegistry_basic");
-
-result.string(KeywordUtils.getViewValue($KeywordRegistry.permissionCondType(), vars.get("$field.CONDTYPE")));
diff --git a/entity/PermissionDetail_entity/entityfields/entity/displayValueProcess.js b/entity/PermissionDetail_entity/entityfields/entity/displayValueProcess.js
new file mode 100644
index 0000000000..241d200ca4
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/entity/displayValueProcess.js
@@ -0,0 +1,9 @@
+//import("system.vars");
+//import("system.result");
+//import("system.neon");
+//
+//let recordstate = vars.get("$sys.recordstate");
+//
+//if(vars.exists("$param.EntityTitle_param") && (recordstate == neon.OPERATINGSTATE_NEW || recordstate == neon.OPERATINGSTATE_EDIT)) {
+//    result.string(vars.getString("$param.EntityTitle_param"));
+//}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/entity/valueProcess.js b/entity/PermissionDetail_entity/entityfields/entity/valueProcess.js
index ace2def782..241d200ca4 100644
--- a/entity/PermissionDetail_entity/entityfields/entity/valueProcess.js
+++ b/entity/PermissionDetail_entity/entityfields/entity/valueProcess.js
@@ -1,7 +1,9 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.exists("$param.EntityTitle_param")) {
-    result.string(vars.getString("$param.EntityTitle_param"));
-}
\ No newline at end of file
+//import("system.vars");
+//import("system.result");
+//import("system.neon");
+//
+//let recordstate = vars.get("$sys.recordstate");
+//
+//if(vars.exists("$param.EntityTitle_param") && (recordstate == neon.OPERATINGSTATE_NEW || recordstate == neon.OPERATINGSTATE_EDIT)) {
+//    result.string(vars.getString("$param.EntityTitle_param"));
+//}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js b/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js
new file mode 100644
index 0000000000..d4c1d911ed
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js
@@ -0,0 +1,14 @@
+//import("system.vars");
+//import("system.result");
+//import("system.neon");
+//
+//var recordstate = vars.get("$sys.recordstate");
+//
+//if (vars.exists("$param.RoleTitle_param")) {
+//    var role = vars.get("$param.RoleTitle_param");
+//    
+//    if(role != undefined && role != null && role != "" && (recordstate == neon.OPERATINGSTATE_NEW || recordstate == neon.OPERATINGSTATE_EDIT)) {
+//        res = role.split("_");
+//        result.string(res[1]);
+//    }
+//}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/role/valueProcess.js b/entity/PermissionDetail_entity/entityfields/role/valueProcess.js
index ce210d3aef..cc6b48287a 100644
--- a/entity/PermissionDetail_entity/entityfields/role/valueProcess.js
+++ b/entity/PermissionDetail_entity/entityfields/role/valueProcess.js
@@ -1,7 +1,9 @@
-import("system.vars");
-import("system.result");
-import("system.neon");
-
-if((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) && vars.exists("$param.RoleTitle_param")) {
-    result.string(vars.getString("$param.RoleTitle_param"));
-}
\ No newline at end of file
+//import("system.vars");
+//import("system.result");
+//import("system.neon");
+//
+//let recordstate = vars.get("$sys.recordstate");
+//
+//if(vars.exists("$param.RoleTitle_param") && (recordstate == neon.OPERATINGSTATE_NEW || recordstate == neon.OPERATINGSTATE_EDIT)) {
+//    result.string(vars.getString("$param.RoleTitle_param"));
+//}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js b/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js
index adbb5889df..f2c594edd7 100644
--- a/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js
+++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js
@@ -6,6 +6,7 @@ var permId = vars.get("$field.UID");
 var accessType = vars.get("$field.ACCESSTYPE");
 var parentPermSetId = PermissionUtil.getParentPermissionSet(permId);
 var linkedActions = PermissionUtil.getAllChildPermissionActions(permId);
+var alias = "_____SYSTEMALIAS";
 
 var sqlCondDelAction = SqlCondition.begin()
 .and("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID in ('" + linkedActions.join("','") + "')")
@@ -34,16 +35,16 @@ switch (accessType) {
         .and("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID in ('" + allPermSets.join("','") + "')")
         .build();
         
-        db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction); // delete all actions
-        db.deleteData("ASYS_PERMISSION", sqlCondDelPerm); // delete all permissions
-        db.deleteData("ASYS_PERMISSIONSET", sqlCondDelPermSet); // delete all permission sets
+        db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction, alias); // delete all actions
+        db.deleteData("ASYS_PERMISSION", sqlCondDelPerm, alias); // delete all permissions
+        db.deleteData("ASYS_PERMISSIONSET", sqlCondDelPermSet, alias); // delete all permission sets
         break;
     default:
-        db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction); // delete all actions of the selected permission
-        db.deleteData("ASYS_PERMISSION", sqlCondDelPerm); // delete the selected permission
+        db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction, alias); // delete all actions of the selected permission
+        db.deleteData("ASYS_PERMISSION", sqlCondDelPerm, alias); // delete the selected permission
         break;
 }
 
 if (PermissionUtil.permSetIsEmpty(parentPermSetId)) {
-    db.deleteData("ASYS_PERMISSIONSET", sqlCondDelPermSet); // delete empty permissionset
+    db.deleteData("ASYS_PERMISSIONSET", sqlCondDelPermSet, alias); // delete empty permissionset
 }
diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js b/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js
index 09f7f0299b..2e3cd82309 100644
--- a/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js
@@ -1,3 +1,4 @@
+import("Permission_lib");
 import("system.logging");
 import("system.neon");
 import("system.util");
@@ -6,6 +7,7 @@ import("system.vars");
 import("Permission_lib");
 
 var table, cols, vals;
+var alias = "_____SYSTEMALIAS";
 var sqlExt = "";
 var permissionid = util.getNewUUID();
 var role = vars.get("$field.ROLE");
@@ -25,7 +27,7 @@ if (checkInput([role, entity, accesstype, condtype, action])) {
         sqlExt += " and ACCESSTYPE = 'R'";
 
     var sqlStr = "select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET where ENTITY_ID = '" + entity + "' and ROLE_ID = '" + role + "'" + sqlExt;
-    var permissionsetid = db.cell(sqlStr);
+    var permissionsetid = db.cell(sqlStr, alias);
     
     if (permissionsetid == "") {
         // no fitting permissionset found - insert new permissionset
@@ -76,6 +78,6 @@ function permExists(pRole, pEntity, pField, pAccesstype, pCondtype, pCondition)
     + " join ASYS_PERMISSION on ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID"
     + " where ENTITY_ID = '" + pEntity + "' and ROLE_ID = '" + pRole + "'"
     + " and ACCESSTYPE = '" + pAccesstype + "' and CONDTYPE = '" + pCondtype + "'" + sqlExt;
-    var permId = db.cell(sqlStr);
+    var permId = db.cell(sqlStr, alias);
     return permId;
 }
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js b/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js
index 0be080b802..e2cc6a303b 100644
--- a/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js
+++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onUpdate.js
@@ -6,6 +6,7 @@ import("Permission_lib");
 
 var table, cols, vals, cond;
 
+var alias = "_____SYSTEMALIAS";
 var permissionid = vars.get("$field.UID");
 var actionNew = vars.get("$field.ACTION").split(",");
 var entityNew = vars.get("$field.ENTITY");
@@ -17,7 +18,7 @@ if (diff.length > 0) {
     // delete all linked permission actions
     table = "ASYS_PERMISSIONACTION";
     cond = SqlCondition.begin().and("ASYS_PERMISSION_ID = '" + permissionid + "'").build();
-    var dbDeletes = db.deleteData(table, cond);
+    var dbDeletes = db.deleteData(table, cond, alias);
     
     // insert the different actions
     cols = db.getColumns(table);
diff --git a/entity/PermissionMetaData_entity/entityfields/metadata/children/entityname_param/valueProcess.js b/entity/PermissionMetaData_entity/entityfields/metadata/children/entityname_param/valueProcess.js
index f7920ec1e2..3ef775221b 100644
--- a/entity/PermissionMetaData_entity/entityfields/metadata/children/entityname_param/valueProcess.js
+++ b/entity/PermissionMetaData_entity/entityfields/metadata/children/entityname_param/valueProcess.js
@@ -1,3 +1,3 @@
 import("system.vars");
 import("system.result");
-result.string(vars.get("$field.TITLE"));
\ No newline at end of file
+result.string(vars.get("$field.UID"));
\ No newline at end of file
diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js
index 247e338f2c..0c0713045e 100644
--- a/process/Permission_lib/process.js
+++ b/process/Permission_lib/process.js
@@ -325,6 +325,17 @@ PermissionUtil.permSetIsEmpty = function(pPermSetId) {
     return false;
 }
 
+/**
+ * Returns all PermissionSets, Permissions and PermissionActions.
+ * 
+ * @result {String[]) all PermissionSets, Permissions and PermissionActions
+ */
+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.
  * 
@@ -397,7 +408,7 @@ PermissionUtil.containsDuplicateActions = function(pPermId, pActionNew) {
  */
 PermissionUtil.insertNewPermissionSet = function(pParentPermSet, pEntity, pRole, pField, pAccessType) {
     var table = "ASYS_PERMISSIONSET";
-    var cols = db.getColumns(table);
+    var cols = db.getColumns(table, alias);
     var permsetid = util.getNewUUID();
     var vals = [pAccessType, permsetid, pParentPermSet, pEntity, pField, pRole];
     db.insertData(table, cols, null, vals, alias);
@@ -417,7 +428,7 @@ PermissionUtil.insertNewPermissionSet = function(pParentPermSet, pEntity, pRole,
  */
 PermissionUtil.insertNewPermission = function(pParentPermSet, pCond, pCondType) {
     var table = "ASYS_PERMISSION";
-    var cols = db.getColumns(table);
+    var cols = db.getColumns(table, alias);
     var permid = util.getNewUUID(); 
     var vals = [permid, pParentPermSet, pCond, pCondType];
     db.insertData(table, cols, null, vals, alias);  
@@ -435,7 +446,7 @@ PermissionUtil.insertNewPermission = function(pParentPermSet, pCond, pCondType)
  */
 PermissionUtil.insertNewPermissionAction = function(pParentPerm, pAction) {
     var table = "ASYS_PERMISSIONACTION";
-    var cols = db.getColumns(table);
+    var cols = db.getColumns(table, alias);
     var permactionid = util.getNewUUID();
     var vals = [pAction, permactionid, pParentPerm];
     db.insertData(table, cols, null, vals, alias);
-- 
GitLab