From 59d9869cc5ff98c873f43dfbf1c3c23d912db1ff Mon Sep 17 00:00:00 2001
From: Simon Leipold <s.leipold@adito.de>
Date: Mon, 5 Aug 2019 14:31:12 +0200
Subject: [PATCH] Permissions - bug fix: conditions of already existing
 permissions can be updated now without error message from onValidation
 process

---
 .../PermissionAction_entity.aod                        |  4 ++++
 entity/PermissionAction_entity/onValidation.js         | 10 ++++++++--
 .../PermissionDetail_entity.aod                        |  4 ++++
 .../children/permissioncondition_param/valueProcess.js |  3 +++
 4 files changed, 19 insertions(+), 2 deletions(-)
 create mode 100644 entity/PermissionDetail_entity/entityfields/permissionactions/children/permissioncondition_param/valueProcess.js

diff --git a/entity/PermissionAction_entity/PermissionAction_entity.aod b/entity/PermissionAction_entity/PermissionAction_entity.aod
index 337c7d2917..6092f3cce0 100644
--- a/entity/PermissionAction_entity/PermissionAction_entity.aod
+++ b/entity/PermissionAction_entity/PermissionAction_entity.aod
@@ -48,6 +48,10 @@
       <name>AccessType_param</name>
       <expose v="true" />
     </entityParameter>
+    <entityParameter>
+      <name>PermissionCondition_param</name>
+      <expose v="true" />
+    </entityParameter>
   </entityFields>
   <recordContainers>
     <jDitoRecordContainer>
diff --git a/entity/PermissionAction_entity/onValidation.js b/entity/PermissionAction_entity/onValidation.js
index d82b59851b..e97725af0b 100644
--- a/entity/PermissionAction_entity/onValidation.js
+++ b/entity/PermissionAction_entity/onValidation.js
@@ -1,17 +1,23 @@
+import("system.db");
 import("system.vars");
 import("system.translate");
 import("system.result");
 import("Permission_lib");
 
-var permissionId = vars.get("$param.PermissionId_param");
+var alias = "_____SYSTEMALIAS";
 var actionTitle = vars.get("$field.ACTION");
+var permissionId = vars.get("$param.PermissionId_param");
+var permCondInput = vars.get("$param.PermissionCondition_param");
 
 if (PermissionUtil.existsPermission(permissionId)) {
     // existing permission
     // check if action is already in DB
     var actionsInDb = PermissionUtil.getPermissionAction(permissionId);
+    var sqlStr = "select COND from ASYS_PERMISSION where ASYS_PERMISSIONID='" + permissionId + "'";
+    var permCondDb = db.cell(sqlStr, alias);
+    
     for each (var action in actionsInDb) {
-        if (PermissionUtil.resolvePermissionActionId(action) == actionTitle) {
+        if (PermissionUtil.resolvePermissionActionId(action) == actionTitle && permCondInput == permCondDb) {
             result.string(translate.text("Action '" + actionTitle + "' already linked to this permission!"));
             break;
         }
diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index 62d48dbd8e..1f674316df 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -188,6 +188,10 @@
           <name>AccessType_param</name>
           <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/children/accesstype_param/valueProcess.js</valueProcess>
         </entityParameter>
+        <entityParameter>
+          <name>PermissionCondition_param</name>
+          <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissioncondition_param/valueProcess.js</valueProcess>
+        </entityParameter>
       </children>
     </entityConsumer>
   </entityFields>
diff --git a/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissioncondition_param/valueProcess.js b/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissioncondition_param/valueProcess.js
new file mode 100644
index 0000000000..13699cb90d
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissioncondition_param/valueProcess.js
@@ -0,0 +1,3 @@
+import("system.vars");
+import("system.result");
+result.string(vars.get("$field.CONDITION"));
\ No newline at end of file
-- 
GitLab