From c457de9bed14ac29002d4225ff31ce582d4548ff Mon Sep 17 00:00:00 2001
From: Simon Leipold <s.leipold@adito.de>
Date: Thu, 25 Jul 2019 18:06:34 +0200
Subject: [PATCH] Permission - added filter to create conditions for
 permissions

---
 .../PermissionDetail_entity.aod                  |  3 +++
 .../contentTitleProcess.js                       |  4 +++-
 .../entityfields/condition/valueProcess.js       | 10 ++++++++++
 .../recordcontainers/jdito/onInsert.js           |  2 ++
 process/Permission_lib/process.js                | 16 ++++++++++++----
 5 files changed, 30 insertions(+), 5 deletions(-)
 create mode 100644 entity/PermissionDetail_entity/entityfields/condition/valueProcess.js

diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index c7b8b99646..805cd84355 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -8,6 +8,7 @@
   </siblings>
   <contentTitleProcess>%aditoprj%/entity/PermissionDetail_entity/contentTitleProcess.js</contentTitleProcess>
   <iconIdProcess>%aditoprj%/entity/PermissionDetail_entity/iconIdProcess.js</iconIdProcess>
+  <titlePlural>Permission Details</titlePlural>
   <recordContainer>jDito</recordContainer>
   <entityFields>
     <entityProvider>
@@ -16,7 +17,9 @@
     <entityField>
       <name>CONDITION</name>
       <title>Condition</title>
+      <contentType>FILTER_TREE</contentType>
       <stateProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js</stateProcess>
+      <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js</valueProcess>
     </entityField>
     <entityField>
       <name>ACTION</name>
diff --git a/entity/PermissionDetail_entity/contentTitleProcess.js b/entity/PermissionDetail_entity/contentTitleProcess.js
index 28deb444c3..7e35ace3e3 100644
--- a/entity/PermissionDetail_entity/contentTitleProcess.js
+++ b/entity/PermissionDetail_entity/contentTitleProcess.js
@@ -3,6 +3,8 @@ import("system.vars");
 import("system.result");
 
 var res = "";
+var entityName = vars.get("$field.ENTITY");
+var noCond = "{\"entity\":\"" + entityName + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
 
 switch (vars.get("$field.ACCESSTYPE")) {
     case "E":
@@ -25,7 +27,7 @@ switch (vars.get("$field.ACCESSTYPE")) {
         break;
 }
 
-if (vars.get("$field.CONDITION") != "") {
+if (vars.get("$field.CONDITION") != noCond && vars.get("$field.CONDITION") != "") {
     res += " - conditional";
 } else {
     res += " - default";
diff --git a/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js b/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js
new file mode 100644
index 0000000000..a7a5aae60f
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/condition/valueProcess.js
@@ -0,0 +1,10 @@
+import("system.logging");
+import("system.neon");
+import("system.vars");
+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 3a8117c203..b521f8d718 100644
--- a/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js
+++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onInsert.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("Permission_lib");
 import("system.neon");
 import("system.util");
@@ -57,6 +58,7 @@ 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)
     }
     
diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js
index 999846f31b..dab7d4ce7f 100644
--- a/process/Permission_lib/process.js
+++ b/process/Permission_lib/process.js
@@ -260,9 +260,13 @@ PermissionUtil.getRootFieldPermission = function(pPermId) {
  * @result {String} returns the id of the default permission of a given permission set. Never 'null', empty string if there is no result.
  */
 PermissionUtil.getDefaultPermission = function(pPermSetId) {
-    var sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION"
+    var sqlStr = "select ENTITY_ID from ASYS_PERMISSIONSET where ASYS_PERMISSIONSETID = '" + pPermSetId + "'";
+    var entityName = db.cell(sqlStr, alias);
+    var noCond = "{\"entity\":\"" + entityName + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+    
+    sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION"
     + " where ASYS_PERMISSIONSET_ID = '" + pPermSetId + "'"
-    + " and COND is null"
+    + " and (COND is null or COND = '" + noCond + "')";
     return db.cell(sqlStr, alias);
 }
 
@@ -274,9 +278,13 @@ PermissionUtil.getDefaultPermission = function(pPermSetId) {
  * @result {String[]} returns the ids of the conditional permissions of a given permission set. The result can never be null.
  */
 PermissionUtil.getConditionalPermission = function(pPermSetId) {
-    var sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION"
+    var sqlStr = "select ENTITY_ID from ASYS_PERMISSIONSET where ASYS_PERMISSIONSETID = '" + pPermSetId + "'";
+    var entityName = db.cell(sqlStr, alias);
+    var noCond = "{\"entity\":\"" + entityName + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
+    
+    sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION"
     + " where ASYS_PERMISSIONSET_ID = '" + pPermSetId + "'"
-    + " and COND is not null"
+    + " and COND is not null and COND not like '" + noCond + "'";
     return db.table(sqlStr, alias);
 }
 
-- 
GitLab