From e8b40c6773dfe94b2d25e76492a361b60b3e8471 Mon Sep 17 00:00:00 2001
From: Simon Leipold <s.leipold@adito.de>
Date: Wed, 5 Jun 2019 14:56:59 +0200
Subject: [PATCH] Permissions - Vorbelegung beim Erstellen von Berechtigungen

---
 .../PermissionDetail_entity.aod                   | 15 +++++++++++----
 .../entityfields/accesstype/valueProcess.js       |  7 ++++++-
 .../entityfields/condition/stateProcess.js        |  9 +++++++++
 .../entityfields/condtype/valueProcess.js         |  2 ++
 .../entityfields/entity/stateProcess.js           | 11 +++++++++++
 .../entityfields/field/dropDownProcess.js         |  2 +-
 .../entityfields/field/stateProcess.js            | 15 +++++++++++++++
 .../entityfields/role/stateProcess.js             | 11 +++++++++++
 .../PermissionDetailPreview_view.aod              |  4 ----
 9 files changed, 66 insertions(+), 10 deletions(-)
 create mode 100644 entity/PermissionDetail_entity/entityfields/condition/stateProcess.js
 create mode 100644 entity/PermissionDetail_entity/entityfields/condtype/valueProcess.js
 create mode 100644 entity/PermissionDetail_entity/entityfields/entity/stateProcess.js
 create mode 100644 entity/PermissionDetail_entity/entityfields/field/stateProcess.js
 create mode 100644 entity/PermissionDetail_entity/entityfields/role/stateProcess.js

diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
index f3d756e765..74fc985e17 100644
--- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod
+++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod
@@ -13,6 +13,7 @@
     <entityField>
       <name>CONDITION</name>
       <title>Condition</title>
+      <stateProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js</stateProcess>
     </entityField>
     <entityField>
       <name>ACTION</name>
@@ -24,9 +25,10 @@
       <name>ROLE</name>
       <title>Role</title>
       <consumer>Roles</consumer>
+      <groupable v="true" />
       <linkedContext>Role</linkedContext>
       <mandatory v="true" />
-      <groupable v="true" />
+      <stateProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/role/stateProcess.js</stateProcess>
       <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/role/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -34,17 +36,19 @@
       <name>ENTITY</name>
       <title>Entity</title>
       <consumer>MetaData</consumer>
+      <groupable v="true" />
       <linkedContext>PermissionMetaData</linkedContext>
       <mandatory v="true" />
-      <groupable v="true" />
+      <stateProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/entity/stateProcess.js</stateProcess>
       <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>
       <title>Field</title>
-      <dropDownProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/field/dropDownProcess.js</dropDownProcess>
       <groupable v="true" />
+      <dropDownProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/field/dropDownProcess.js</dropDownProcess>
+      <stateProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/field/stateProcess.js</stateProcess>
     </entityField>
     <entityField>
       <name>UID</name>
@@ -57,8 +61,9 @@
       <name>ACCESSTYPE</name>
       <title>Access type</title>
       <consumer>KeywordAccessType</consumer>
-      <mandatory v="true" />
       <groupable v="true" />
+      <mandatory v="true" />
+      <state>READONLY</state>
       <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js</displayValueProcess>
     </entityField>
@@ -67,6 +72,8 @@
       <title>Condition Type</title>
       <consumer>KeywordConditionType</consumer>
       <mandatory v="true" />
+      <state>READONLY</state>
+      <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/condtype/valueProcess.js</valueProcess>
       <displayValueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/condtype/displayValueProcess.js</displayValueProcess>
     </entityField>
     <entityField>
diff --git a/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js b/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js
index c24340acec..a94ae37903 100644
--- a/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js
+++ b/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js
@@ -1,3 +1,4 @@
+import("system.logging");
 import("system.vars");
 import("system.result");
 import("Permission_lib");
@@ -5,14 +6,18 @@ import("Permission_lib");
 var field = vars.get("$field.FIELD");
 var role = vars.get("$field.ROLE");
 var entity = vars.get("$field.ENTITY");
+var permId = vars.get("$field.UID");
 var rootPermSet = PermissionUtil.getRootPermissionSet(role, entity);
+var rootPerm = PermissionUtil.getDefaultPermission(rootPermSet);
 
 if (rootPermSet == "") {
     result.string("E");
+} else if (rootPerm == permId) {
+    result.string("E");
 } else {
     result.string("R");
 } 
 
 if (field != undefined && field != null && field != "") {
     result.string("F");
-}
\ No newline at end of file
+}
diff --git a/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js b/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js
new file mode 100644
index 0000000000..f6b4510443
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/condition/stateProcess.js
@@ -0,0 +1,9 @@
+import("system.vars");
+import("system.result");
+import("system.neon");
+
+if(vars.get("$field.ACCESSTYPE") == "E") {
+    result.string(neon.COMPONENTSTATE_DISABLED);
+} else {
+    result.string(neon.COMPONENTSTATE_AUTO);
+}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/condtype/valueProcess.js b/entity/PermissionDetail_entity/entityfields/condtype/valueProcess.js
new file mode 100644
index 0000000000..ab53c1064a
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/condtype/valueProcess.js
@@ -0,0 +1,2 @@
+import("system.result");
+result.string("true");
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/entity/stateProcess.js b/entity/PermissionDetail_entity/entityfields/entity/stateProcess.js
new file mode 100644
index 0000000000..943bb08817
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/entity/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var entityTitle = vars.get("$param.EntityTitle_param");
+
+if (entityTitle != undefined && entityTitle != null && entityTitle != "") {
+    result.string(neon.COMPONENTSTATE_READONLY);
+} else {
+    result.string(neon.COMPONENTSTATE_AUTO);
+}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/field/dropDownProcess.js b/entity/PermissionDetail_entity/entityfields/field/dropDownProcess.js
index a0b883d9d7..224911373c 100644
--- a/entity/PermissionDetail_entity/entityfields/field/dropDownProcess.js
+++ b/entity/PermissionDetail_entity/entityfields/field/dropDownProcess.js
@@ -3,7 +3,7 @@ import("system.result");
 import("system.vars");
 import("system.project");
 
-var entityTitle = vars.get("$param.EntityTitle_param");
+var entityTitle = vars.get("$field.ENTITY");
 if (entityTitle != undefined && entityTitle != null && entityTitle != "") {
     var entityStructure = project.getEntityStructure(entityTitle);
     var res = [];
diff --git a/entity/PermissionDetail_entity/entityfields/field/stateProcess.js b/entity/PermissionDetail_entity/entityfields/field/stateProcess.js
new file mode 100644
index 0000000000..b6485674e6
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/field/stateProcess.js
@@ -0,0 +1,15 @@
+import("system.result");
+import("system.neon");
+import("system.vars");
+import("Permission_lib");
+
+var role = vars.get("$field.ROLE");
+var entity = vars.get("$field.ENTITY");
+
+rootPermSet = PermissionUtil.getRootPermissionSet(role, entity);
+
+if (rootPermSet == "") {
+    result.string(neon.COMPONENTSTATE_DISABLED);
+} else {
+    result.string(neon.COMPONENTSTATE_EDITABLE);
+}
\ No newline at end of file
diff --git a/entity/PermissionDetail_entity/entityfields/role/stateProcess.js b/entity/PermissionDetail_entity/entityfields/role/stateProcess.js
new file mode 100644
index 0000000000..f5fec84a8c
--- /dev/null
+++ b/entity/PermissionDetail_entity/entityfields/role/stateProcess.js
@@ -0,0 +1,11 @@
+import("system.result");
+import("system.vars");
+import("system.neon");
+
+var roleTitle = vars.get("$param.RoleTitle_param");
+
+if (roleTitle != undefined && roleTitle != null && roleTitle != "") {
+    result.string(neon.COMPONENTSTATE_READONLY);
+} else {
+    result.string(neon.COMPONENTSTATE_AUTO);
+}
\ No newline at end of file
diff --git a/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod b/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
index ca1524850b..e6db91d75c 100644
--- a/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
+++ b/neonView/PermissionDetailPreview_view/PermissionDetailPreview_view.aod
@@ -19,10 +19,6 @@
       <editMode v="true" />
       <entityField>#ENTITY</entityField>
       <fields>
-        <entityFieldLink>
-          <name>7aa0ce6f-370c-4f50-8498-fd5768e0859c</name>
-          <entityField>CONDTYPE</entityField>
-        </entityFieldLink>
         <entityFieldLink>
           <name>dd33df7a-82e6-49a8-b35f-99d0187970e3</name>
           <entityField>CONDITION</entityField>
-- 
GitLab