diff --git a/entity/PermissionAction_entity/PermissionAction_entity.aod b/entity/PermissionAction_entity/PermissionAction_entity.aod index dbd5ddd18e9a585db3bd6b29351adc49f4835da9..d03e9ac77629966f77369f526b1829941f4bff88 100644 --- a/entity/PermissionAction_entity/PermissionAction_entity.aod +++ b/entity/PermissionAction_entity/PermissionAction_entity.aod @@ -16,7 +16,6 @@ <title>Action</title> <dropDownProcess>%aditoprj%/entity/PermissionAction_entity/entityfields/action/dropDownProcess.js</dropDownProcess> <stateProcess>%aditoprj%/entity/PermissionAction_entity/entityfields/action/stateProcess.js</stateProcess> - <displayValueProcess>%aditoprj%/entity/PermissionAction_entity/entityfields/action/displayValueProcess.js</displayValueProcess> </entityField> <entityField> <name>UID</name> diff --git a/entity/PermissionAction_entity/entityfields/action/displayValueProcess.js b/entity/PermissionAction_entity/entityfields/action/displayValueProcess.js deleted file mode 100644 index 65a3ad0b2b9e511648cf581003a9061e05a1c8ad..0000000000000000000000000000000000000000 --- a/entity/PermissionAction_entity/entityfields/action/displayValueProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.result"); -import("system.vars"); - -var action = vars.get("$field.ACTION"); - -result.string(action); \ No newline at end of file diff --git a/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js b/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js index 64d2e3dbafd4e842abc03c05b85b260aaf72e727..8959cb031e96610d54e0f5160dc98e837ff6b66e 100644 --- a/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js +++ b/entity/PermissionDetail_entity/entityfields/accesstype/displayValueProcess.js @@ -1,3 +1,4 @@ +import("system.tools"); import("system.neon"); import("system.vars"); import("system.result"); @@ -5,12 +6,11 @@ import("Permission_lib"); var operatingState = vars.get("$sys.operatingstate"); var field = vars.get("$field.FIELD"); -var role = vars.get("$field.ROLE"); +var roleName = vars.get("$field.ROLE"); var entity = vars.get("$field.ENTITY"); var accesstype = vars.get("$field.ACCESSTYPE"); -var rootPermSet = PermissionUtil.getSetRoot(role, entity); -if (operatingState == neon.OPERATINGSTATE_SEARCH || neon.OPERATINGSTATE_VIEW) { +if (operatingState == neon.OPERATINGSTATE_SEARCH || operatingState == neon.OPERATINGSTATE_VIEW) { switch (accesstype) { case "E": result.string("Entität"); @@ -24,10 +24,13 @@ if (operatingState == neon.OPERATINGSTATE_SEARCH || neon.OPERATINGSTATE_VIEW) { } } else { // editing/creating a new permission - // if there is no permission set for a given role-entity-combination -> permission has to be Entity + // if there is no permission set for a given role-entity-combination or only one with condtype 0 -> permission has to be Entity // otherwise Record // if $field.FIELD is filled, then its a permission on Field access level - if (rootPermSet == "") { + var rootPermSet = PermissionUtil.getSetRoot(roleName, entity); + var rootPerm = PermissionUtil.getPermissionWithoutCond(rootPermSet); + + if (rootPermSet == "" || PermissionUtil.getCondType(rootPerm) == 0) { result.string("Entität"); } else { result.string("Datensatz"); diff --git a/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js b/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js index afcec9765111c860684eb8cd758ff469c5f85247..e2f49cc4559b936d415eeae12aa3f62a31399e69 100644 --- a/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js +++ b/entity/PermissionDetail_entity/entityfields/accesstype/valueProcess.js @@ -3,10 +3,10 @@ import("system.result"); import("Permission_lib"); var field = vars.get("$field.FIELD"); -var role = vars.get("$field.ROLE"); +var roleName = vars.get("$field.ROLE"); var entity = vars.get("$field.ENTITY"); var permId = vars.get("$field.UID"); -var rootPermSet = PermissionUtil.getSetRoot(role, entity); +var rootPermSet = PermissionUtil.getSetRoot(roleName, entity); var rootPerm = PermissionUtil.getPermissionWithoutCond(rootPermSet); if (PermissionUtil.getCondType(rootPerm) == 0) { diff --git a/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissionid_param/valueProcess.js b/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissionid_param/valueProcess.js index 17eccf6fb293fb7cfc0bd1ee58b86616127392ce..4842b2fe597714518de79af76cc18e6229c6b514 100644 --- a/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissionid_param/valueProcess.js +++ b/entity/PermissionDetail_entity/entityfields/permissionactions/children/permissionid_param/valueProcess.js @@ -7,40 +7,35 @@ import("system.result"); import("Permission_lib"); var alias = SqlUtils.getSystemAlias(); -var rootPermId; +var rootPermId = ""; var entity = vars.get("$field.ENTITY"); +var role = vars.get("$field.ROLE"); var cond = vars.get("$field.CONDITION"); var field = vars.get("$field.FIELD"); +var accesstype = vars.get("$field.ACCESSTYPE"); var emptyCond = PermissionUtil.getEmptyCondString(entity); -var permSetId = PermissionUtil.getSet(vars.get("$field.ROLE"), entity, vars.get("$field.ACCESSTYPE"), field); +var permSetId = PermissionUtil.getSet(role, entity, accesstype, field); +var fieldWhereCond = " and ASYS_PERMISSIONSET.FIELD_ID is null" + +if (field != "") { + fieldWhereCond = " and ASYS_PERMISSIONSET.FIELD_ID = '" + field + "'" +} if (permSetId != "") { - // check if default or conditional permission has to be returned + // default permission if (cond == "" || cond == emptyCond) { rootPermId = PermissionUtil.getPermissionWithoutCond(permSetId); - } else { - permsWithCond = PermissionUtil.getPermissionWithCond(permSetId); - - var sqlHelper = new SqlMaskingUtils(alias); - - // Why a loop which breaks instantly?? - for each (let perm in permsWithCond) { - rootPermId = newSelect("ASYS_PERMISSIONID", alias) - .from("ASYS_PERMISSION") - .join("ASYS_PERMISSIONSET", "ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID = ASYS_PERMISSION.ASYS_PERMISSIONSET_ID") - .where("ASYS_PERMISSION.COND", cond, sqlHelper.cast("#", SQLTYPES.VARCHAR, cond.length) + " = ?") - .and("ASYS_PERMISSIONSET.FIELD_ID", field) - .cell(); - break; - } + } else { // conditional permission + let sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION join ASYS_PERMISSIONSET on ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID = ASYS_PERMISSION.ASYS_PERMISSIONSET_ID where cast(ASYS_PERMISSION.COND as varchar(" + cond.length + ")) = '" + cond + "'" + fieldWhereCond + " and ASYS_PERMISSIONSET.ROLE_ID='" + role + "' and ASYS_PERMISSIONSET.ENTITY_ID='" + entity + "'"; + rootPermId = db.cell(sqlStr, alias); } // return valid permId - if (rootPermId != "") + if (rootPermId != "") { result.string(rootPermId); - else + } else { result.string(vars.get("$field.UID")); - + } } else { result.string(vars.get("$field.UID")); } \ No newline at end of file diff --git a/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js b/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js index 6fbfa2b196b8083b2d8768f4e6f4877bad591817..e4d991decadf51b8191b4b3bcb00b6366a65ea38 100644 --- a/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js +++ b/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js @@ -1,3 +1,4 @@ +import("system.tools"); import("Sql_lib"); import("system.db"); import("system.vars"); @@ -11,11 +12,12 @@ var allowedNumberOfActionsForFieldPermissions = 2; var entityName = vars.get("$field.ENTITY"); var roleTitle = vars.get("$field.ROLE"); +var roleName = PermissionUtil.resolveRoleTitle(roleTitle); var fieldTitle = vars.get("$field.FIELD"); var accesstype = vars.get("$field.ACCESSTYPE"); var permCondInput = vars.get("$field.CONDITION"); var permCondType = vars.get("$field.CONDTYPE"); -var permId = PermissionUtil.getPermission(roleTitle, entityName, fieldTitle, accesstype, permCondInput, permCondType); +var permId = PermissionUtil.getPermission(roleName, entityName, fieldTitle, accesstype, permCondInput, permCondType); var actionsInDb = PermissionUtil.getActions([permId]); var actionsAsStringArray = vars.get("$field.ACTION").split(","); // only useful while working with already existing permissions var emptyCond = PermissionUtil.getEmptyCondString(entityName); @@ -53,7 +55,7 @@ if (PermissionUtil.permissionExists(permId)) { } // if conditional permission: check if action is already linked to default permission if (!isDefaultPermission) { - if (PermissionUtil.actionExists(row.ACTION, PermissionUtil.getPermissionWithoutCond(PermissionUtil.getSet(roleTitle, entityName, accesstype, fieldTitle)))) { + if (PermissionUtil.actionExists(row.ACTION, PermissionUtil.getPermissionWithoutCond(PermissionUtil.getSet(roleName, entityName, accesstype, fieldTitle)))) { result.string(translate.text("Action '" + row.ACTION + "' is already linked to the default permission.")); } } @@ -67,7 +69,7 @@ if (PermissionUtil.permissionExists(permId)) { } else { // new permission if (insertedRows.length > 0) { - var defaultPerm = PermissionUtil.getPermission(roleTitle, entityName, fieldTitle, accesstype, emptyCond); + var defaultPerm = PermissionUtil.getPermission(roleName, entityName, fieldTitle, accesstype, emptyCond); if (PermissionUtil.permissionExists(defaultPerm)) { var defaultActions = PermissionUtil.getActions([defaultPerm]); for each (let entry in insertedRows) { diff --git a/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js b/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js index 1ed9831e0531b173837d767eb334c302a27d8d74..c385f20ddda44bda9cddbaef0915a3f94d6f3d3d 100644 --- a/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js +++ b/entity/PermissionDetail_entity/entityfields/role/displayValueProcess.js @@ -1,3 +1,4 @@ +import("Permission_lib"); import("system.vars"); import("system.result"); import("system.neon"); @@ -8,10 +9,7 @@ var role = ""; if (vars.exists("$param.RoleTitle_param") && recordstate == neon.OPERATINGSTATE_NEW) { role = vars.get("$param.RoleTitle_param"); } else { - role = vars.get("$this.value"); + role = PermissionUtil.resolveRoleTitle(vars.get("$this.value")); } -if(role != undefined && role != null && role != "") { - res = role.split("_"); - result.string(res[1]); -} \ No newline at end of file +result.string(role); \ 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 ca8a1a6040ec15a1814eac2221f0b5562ae1f327..83a1eb4e203e560ee9f4be26a3e1fed3886bbe8e 100644 --- a/entity/PermissionDetail_entity/entityfields/role/valueProcess.js +++ b/entity/PermissionDetail_entity/entityfields/role/valueProcess.js @@ -1,3 +1,4 @@ +import("Permission_lib"); import("system.vars"); import("system.result"); import("system.neon"); @@ -8,7 +9,7 @@ var role = ""; if (vars.exists("$param.RoleTitle_param") && recordstate == neon.OPERATINGSTATE_NEW) { role = vars.get("$param.RoleTitle_param"); } else { - role = vars.get("$this.value"); + role = PermissionUtil.resolveRoleTitle(vars.get("$this.value")); } result.string(role); \ No newline at end of file diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js b/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js index d47bb91dfd65bde6189c530fb4d25e7de0597e33..dbb92a517df4b2c365213c6cedd4aed929d4c158 100644 --- a/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/PermissionDetail_entity/recordcontainers/jdito/contentProcess.js @@ -1,3 +1,4 @@ +import("system.tools"); import("Sql_lib"); import("system.util"); import("system.vars"); @@ -6,8 +7,6 @@ import("system.result"); import("Permission_lib"); import("system.project"); -var alias = SqlUtils.getSystemAlias(); -var selectedPermission = vars.get("$local.idvalues"); var sqlStr; var querySelect = newSelect("ASYS_PERMISSION.ASYS_PERMISSIONID, ASYS_PERMISSIONSET.ENTITY_ID, ASYS_PERMISSIONSET.ROLE_ID," + " ASYS_PERMISSIONSET.FIELD_ID, ASYS_PERMISSION.COND, ASYS_PERMISSIONACTION.ACTION, ASYS_PERMISSIONSET.ACCESSTYPE, ASYS_PERMISSION.CONDTYPE", alias) @@ -20,10 +19,8 @@ var entitiesMetaData = project.getDataModels(project.DATAMODEL_KIND_ENTITY); var entityStructure; var entitiesUsePermFlagSet = []; var fieldsUsePermFlagSet = []; -var emptyCond = PermissionUtil.getEmptyCondString(vars.get("$field.ENTITY")); -// gets all names of the entites which have the 'usePermission'-flag set (positive list) -// gets all names of the fields which have the 'usePermission'-flag set (positive list) +// gets all names of entites and fields which have the 'usePermission'-flag set (positive list) for each (let entityMetaData in entitiesMetaData) { if (entityMetaData[6] == "true") { entitiesUsePermFlagSet.push(entityMetaData[0]) @@ -62,6 +59,13 @@ else if (entitiesUsePermFlagSet.length > 0) sqlRes = querySelect.table(); } + +// converting roleName to roleTitle: roleTitle gets displayed in treetable, roleName is still in db (ASYS_PERMISSIONSET.ROLE_ID) +var allRoles = tools.getAllRoles(); +for (let i = 0; i < sqlRes.length; i++) { + sqlRes[i][2] = allRoles[sqlRes[i][2]][0]; +} + var permissionTable = PermissionUtil.convertArrToObj(sqlRes); var permissionTableOrigin = permissionTable; // used to build tree @@ -89,6 +93,7 @@ for (let i = 0; i < permissionTable.length - 1; i++) { } var res = []; +var selectedPermission = vars.get("$local.idvalues"); if (selectedPermission == null) { // no permission selected, return all permission entrys for each (let entry in groupedPermissionTable) { // iterates over all grouped permissions @@ -123,17 +128,9 @@ result.object(res); function prepareResultArray(pEntry, pRes) { var parentPermission = ""; - var emptyCond = PermissionUtil.getEmptyCondString(pEntry.entity); if (pEntry.accesstype != "E") { - if (pEntry.cond == "" || pEntry.cond == emptyCond) { // default permission - parentPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSetOfSet(PermissionUtil.getParentSet(pEntry.permissionid))); - } else { // conditional permission - parentPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSet(pEntry.permissionid)); - if (parentPermission == "") { - parentPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSetOfSet(PermissionUtil.getParentSet(pEntry.permissionid))); - } - } + parentPermission = PermissionUtil.getPermissionWithoutCond(PermissionUtil.getParentSetOfSet(PermissionUtil.getParentSet(pEntry.permissionid))); } pRes.push([pEntry.permissionid, pEntry.entity, pEntry.role, pEntry.field, pEntry.cond, sortActions(pEntry.action.split(","), pEntry.accesstype).join(","), pEntry.accesstype, pEntry.condtype, parentPermission]); @@ -197,7 +194,7 @@ function sortResultsByCondition(a, b) { var emptyCondA = PermissionUtil.getEmptyCondString(a[1]); var emptyCondB = PermissionUtil.getEmptyCondString(b[1]); - if (a[4] == "" || a[4] == emptyCond) return -1; + if (a[4] == "" || a[4] == emptyCondA) return -1; else if (b[4] == "" || b[4] == emptyCondB) return -1; else if (a[4] != "" && a[4] != emptyCondA) return 1; else if (b[4] != "" && b[4] != emptyCondB) return 1; diff --git a/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js b/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js index 5043b74a80681df88a26355266de1b1d5f87b6ac..4a73a56fbacb65b7f2a1adbc609a48c6d35eb3d6 100644 --- a/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js +++ b/entity/PermissionDetail_entity/recordcontainers/jdito/onDelete.js @@ -32,22 +32,8 @@ switch (accessType) { sqlCondDelPermSet.deleteData(true, "ASYS_PERMISSIONSET"); // delete all permission sets break; default: - if (PermissionUtil.getCond(permId) == "" || PermissionUtil.getCond(permId) == emptyCond) { // check if permission is default or conditional permission - // default permission -> also have to delete sub permissions - let allPerms = PermissionUtil.getPermissionWithCond(PermissionUtil.getParentSet(permId)); - allPerms.push(permId); - let allActions = PermissionUtil.getActions(allPerms); - - sqlCondDelAction = newWhereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID", allActions, SqlBuilder.IN(), undefined, alias); - sqlCondDelPerm = newWhereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONID", allPerms, SqlBuilder.IN(), undefined, alias); - - sqlCondDelAction.deleteData(true, "ASYS_PERMISSIONACTION"); // delete all actions of the selected permission - sqlCondDelPerm.deleteData(true, "ASYS_PERMISSION"); // delete the selected permission - } else { - // conditional permission -> only delete this permission - sqlCondDelAction.deleteData(true, "ASYS_PERMISSIONACTION"); // delete all actions of the selected permission - sqlCondDelPerm.deleteData(true, "ASYS_PERMISSION"); // 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; } diff --git a/entity/Role_entity/recordcontainers/jdito/contentProcess.js b/entity/Role_entity/recordcontainers/jdito/contentProcess.js index cac16db98487a53812c04296f0c2a3e9c6f7b04b..1044e52c48b698185800764da51caaf372620fc2 100644 --- a/entity/Role_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Role_entity/recordcontainers/jdito/contentProcess.js @@ -7,7 +7,7 @@ var lang = vars.get("$sys.clientlanguage");//e.g. "de" var country = vars.get("$sys.clientcountry");//e.g. "DE" locale = country ? lang + "_" + country : lang; var selectedRole = vars.get("$local.idvalues"); -var roles = tools.getAllRoles(); +var allRoles = tools.getAllRoles(); var res = []; var excludeRoles = {}; @@ -19,11 +19,11 @@ if (vars.exists("$param.ExcludeRoles_param") && vars.get("$param.ExcludeRoles_pa }, excludeRoles); } -for (let rolename in roles) { - let role = roles[rolename]; - if (!excludeRoles[rolename]) { - let numberOfUsersInSelectedRole = tools.getUsersWithRole(rolename).length; - res.push([rolename, role[0], role[1], role[2], numberOfUsersInSelectedRole + " " + translate.text("User", locale)]); +for each (let role in allRoles) { + var roleName = role[3]; + if (!excludeRoles[roleName]) { + let numberOfUsersInSelectedRole = tools.getUsersWithRole(roleName).length; + res.push([roleName, role[0], role[1], role[2], numberOfUsersInSelectedRole + " " + translate.text("User", locale)]); } } diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js index 930bd8b3ad18f7e6bc02f1fd9e44e552fda9030e..344dba9a2f178bb799cfc382f6bc8b19d0542923 100644 --- a/process/Permission_lib/process.js +++ b/process/Permission_lib/process.js @@ -1,3 +1,4 @@ +import("system.tools"); import("system.SQLTYPES"); import("system.util"); import("system.db"); @@ -92,12 +93,12 @@ function PermissionUtil () {} } /** - * Converts a given array to an object with properties permissionid, entity, role, field, cond, action, accesstype. - * - * @param {String[]} pArr the array which should be converted to an object. - * - * @result {{}} converted object - */ + * Converts a given array to an object with properties permissionid, entity, role, field, cond, action, accesstype, condtype. + * + * @param {String[]} pArr the array which should be converted to an object. Order of array: permid, entity, role, field, cond, action, accesstype, condtype. + * + * @result {{}} converted object + */ PermissionUtil.convertArrToObj = function(pArr) { var ret = pArr.map(function(x) { return { @@ -622,6 +623,24 @@ function PermissionUtil () {} .deleteData(true, "ASYS_PERMISSIONACTION"); } + /** + * Converts a title of a role to the unqiue name of a role. + * + * @param {String} pRoleTitle title of a role, mandatory + * + * @result {String} returns name of a role, empty string if no fitting role name exists + */ + PermissionUtil.resolveRoleTitle = function(pRoleTitle) { + var allRoles = tools.getAllRoles(); + var roleName = ""; + for each (role in allRoles) { + if (role[0] == pRoleTitle) { + roleName = role[3]; + } + } + return roleName; + } + } //end of block