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