diff --git a/entity/PermissionAction_entity/PermissionAction_entity.aod b/entity/PermissionAction_entity/PermissionAction_entity.aod index 6092f3cce0d86a0052ed44fb3a540fe7329b45ad..b79ba7a62cda9b68c901884c4b9d74b49c750411 100644 --- a/entity/PermissionAction_entity/PermissionAction_entity.aod +++ b/entity/PermissionAction_entity/PermissionAction_entity.aod @@ -34,6 +34,7 @@ </entityProvider> <entityConsumer> <name>PermissionDetails</name> + <onValidation>%aditoprj%/entity/PermissionAction_entity/entityfields/permissiondetails/onValidation.js</onValidation> <dependency> <name>dependency</name> <entityName>PermissionDetail_entity</entityName> diff --git a/entity/PermissionAction_entity/entityfields/permissiondetails/onValidation.js b/entity/PermissionAction_entity/entityfields/permissiondetails/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..17a9427ed7ea706af5dc3efde8f40d9f1c2b0353 --- /dev/null +++ b/entity/PermissionAction_entity/entityfields/permissiondetails/onValidation.js @@ -0,0 +1,35 @@ +import("system.logging"); +import("Sql_lib"); +import("system.db"); +import("system.vars"); +import("system.translate"); +import("system.result"); +import("Permission_lib"); + +var alias = SqlUtils.getSystemAlias(); +var actionTitle = vars.get("$field.ACTION"); +var permissionId = vars.get("$param.PermissionId_param"); +var permCondInput = vars.get("$param.PermissionCondition_param"); + +//var deletedRows = vars.get("$field." + pConsumerField + ".deletedRows"); +var deletedRows = vars.get("$field.PermissionDetails.deletedRows"); +logging.log("deleted rows: " + deletedRows); + +if (actionTitle == "null" || actionTitle == undefined || actionTitle == null || actionTitle == "") { + result.string(translate.text("Empty actions are not allowed!")); +} else 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 && permCondInput == permCondDb) { + result.string(translate.text("Action '" + actionTitle + "' already linked to this permission!")); + break; + } + } +} else { + result.string(true); +} \ No newline at end of file diff --git a/entity/PermissionAction_entity/onValidation.js b/entity/PermissionAction_entity/onValidation.js index ea8413e93c72ca687f519b7f4a739581d30ba0f5..be4d539d44a1e2492d85480020e1b3fdba5968ac 100644 --- a/entity/PermissionAction_entity/onValidation.js +++ b/entity/PermissionAction_entity/onValidation.js @@ -1,30 +1,9 @@ -import("Sql_lib"); -import("system.db"); import("system.vars"); import("system.translate"); import("system.result"); -import("Permission_lib"); -var alias = SqlUtils.getSystemAlias(); var actionTitle = vars.get("$field.ACTION"); -var permissionId = vars.get("$param.PermissionId_param"); -var permCondInput = vars.get("$param.PermissionCondition_param"); if (actionTitle == "null" || actionTitle == undefined || actionTitle == null || actionTitle == "") { result.string(translate.text("Empty actions are not allowed!")); -} else 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 && permCondInput == permCondDb) { - result.string(translate.text("Action '" + actionTitle + "' already linked to this permission!")); - break; - } - } -} else { - result.string(true); } \ No newline at end of file diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod index a4e15eebbe0dc95786588fb321ed810e7f452154..4905d05f3b0a5357a66bba2e5848a2897daa4be7 100644 --- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod +++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod @@ -175,6 +175,7 @@ </entityConsumer> <entityConsumer> <name>PermissionActions</name> + <onValidation>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js</onValidation> <dependency> <name>dependency</name> <entityName>PermissionAction_entity</entityName> diff --git a/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js b/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..5d4bdb1dbbd2d33d5697b4d6e420bb7201b7b238 --- /dev/null +++ b/entity/PermissionDetail_entity/entityfields/permissionactions/onValidation.js @@ -0,0 +1,88 @@ +import("system.logging"); +import("Sql_lib"); +import("system.db"); +import("system.vars"); +import("system.translate"); +import("system.result"); +import("Permission_lib"); + +var allowedNumberOfActionsForRecordPermission = 3; +var allowedNumberOfActionsForEntityPermissions = 2; +var allowedNumberOfActionsForFieldPermissions = 2; + +var entityTitle = vars.get("$field.ENTITY"); +var roleTitle = vars.get("$field.ROLE"); +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 permissionId = PermissionUtil.getPermission(roleTitle, entityTitle, fieldTitle, accesstype, permCondInput, permCondType); +var actionsInDb = PermissionUtil.getPermissionAction(permissionId); + +var actionsAsStringArray = vars.get("$field.ACTION").split(","); // only useful while working with already existing permissions + +var deletedRows = vars.get("$field.PermissionActions.deletedRows"); +var changedRows = vars.get("$field.PermissionActions.changedRows"); +var insertedRows = vars.get("$field.PermissionActions.insertedRows"); + +logging.log("del rows: " + deletedRows.toSource()); +logging.log("cha rows: " + changedRows.toSource()); +logging.log("ins rows: " + insertedRows.toSource()); + +if (PermissionUtil.existsPermission(permissionId)) { + // old permission + // insert nur möglich, wenn gleiche action auch gelöscht wurde, oder zuvor nicht da war + for each (let row in insertedRows) { + var actionGotJustDelted = false; + if (PermissionUtil.actionExists(row.ACTION, permissionId)) { + for each (let delRow in deletedRows) { + if (row.ACTION == delRow.ACTION) { + actionGotJustDelted = true; + } + } + if (!actionGotJustDelted) { + result.string(translate.text("Action '" + row.ACTION + "' already linked to this permission.")); + } + } + } + + for each (let row in changedRows) { + if (PermissionUtil.actionExists(row.ACTION, permissionId) && actionsAsStringArray.indexOf(row.ACTION) == -1) { + result.string(translate.text("Action '" + row.ACTION + "' already linked to this permission.")); + } + } +} else { + // new permission + if (insertedRows.length > 1) { + for (let i = 0; i < insertedRows.length-1; i++) { + for (let j = i + 1; j < insertedRows.length; j++) { + if (insertedRows[i].ACTION == insertedRows[j].ACTION) { + result.string(translate.text("No duplicates allowed: action '" + insertedRows[i].ACTION + "'")); + } + } + } + } + +} + +if (insertedRows.length > 0) { + switch (accesstype) { + case "E": + if (actionsInDb.length >= allowedNumberOfActionsForEntityPermissions && !actionGotJustDelted) { + result.string(translate.text("Only " + allowedNumberOfActionsForEntityPermissions + " actions allowed for this type of permission.")); + } + break; + case "R": + if (actionsInDb.length >= allowedNumberOfActionsForRecordPermission && !actionGotJustDelted) { + result.string(translate.text("Only " + allowedNumberOfActionsForRecordPermission + " actions allowed for this type of permission.")); + } + break; + case "F": + if (actionsInDb.length >= allowedNumberOfActionsForFieldPermissions && !actionGotJustDelted) { + result.string(translate.text("Only " + allowedNumberOfActionsForFieldPermissions + " actions allowed for this type of permission.")); + } + break; + default: + result.string(translate.text("This error should never appear - contact administrator.")); + } +} \ No newline at end of file diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js index d5b1425935b6eb7eeef19f148ddb419b8671781d..1d8f9942319398d67bcabdfc7751299a6eb594d9 100644 --- a/process/Permission_lib/process.js +++ b/process/Permission_lib/process.js @@ -12,125 +12,125 @@ function PermissionUtil () {} { //block where variables declared with let are available to avoid unexpected side-effects -let alias = SqlUtils.getSystemAlias(); + let alias = SqlUtils.getSystemAlias(); -/** + /** * Returns the ids of all subordinated permission sets of a given parent permission set. * * @param {String} pPermissionSetId the id of the parent permission set * * @result {String[]} array with the ids of every subordinated permission set. The result can never be null. */ -PermissionUtil.getAllChildPermissionSets = function (pPermissionSetId) -{ - return db.array(db.COLUMN, SqlCondition.begin() - .and("ASYS_PERMISSIONSET_ID = '" + pPermissionSetId + "'") - .buildSql("select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET") - , alias); -} + PermissionUtil.getAllChildPermissionSets = function (pPermissionSetId) + { + return db.array(db.COLUMN, SqlCondition.begin() + .and("ASYS_PERMISSIONSET_ID = '" + pPermissionSetId + "'") + .buildSql("select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET") + , alias); + } -/** + /** * Returns the id of the subordinated permission set with accesstype 'record' of a given permission set. * * @param {String} pPermissionSetId the id of the parent permission set * * @result {String} id of subordinated permission set. The result can never be null. */ -PermissionUtil.getChildRecordPermissionSet = function (pPermissionSetId) -{ - return db.array(db.COLUMN, SqlCondition.begin() - .and("ASYS_PERMISSIONSET_ID = '" + pPermissionSetId + "'") - .and("ACCESSTYPE = 'R'") - .buildSql("select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET") - , alias); -} + PermissionUtil.getChildRecordPermissionSet = function (pPermissionSetId) + { + return db.array(db.COLUMN, SqlCondition.begin() + .and("ASYS_PERMISSIONSET_ID = '" + pPermissionSetId + "'") + .and("ACCESSTYPE = 'R'") + .buildSql("select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET") + , alias); + } -/** + /** * Returns all subordinated permissions of a given permission set. * * @param {String} pPermissionSetId the id of the parent permission set * * @result {String[]} array with the ids of every subordinated permission. The result can never be null. */ -PermissionUtil.getAllChildPermissions = function (pPermissionSetId) -{ - return db.array(db.COLUMN, SqlCondition.begin() - .and("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID = '" + pPermissionSetId + "'") - .buildSql("select ASYS_PERMISSION.ASYS_PERMISSIONID from ASYS_PERMISSION" - + " join ASYS_PERMISSIONSET on ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID = ASYS_PERMISSION.ASYS_PERMISSIONSET_ID") - , alias); -} + PermissionUtil.getAllChildPermissions = function (pPermissionSetId) + { + return db.array(db.COLUMN, SqlCondition.begin() + .and("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID = '" + pPermissionSetId + "'") + .buildSql("select ASYS_PERMISSION.ASYS_PERMISSIONID from ASYS_PERMISSION" + + " join ASYS_PERMISSIONSET on ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID = ASYS_PERMISSION.ASYS_PERMISSIONSET_ID") + , alias); + } -/** + /** * Returns all subordinated permission actions of a given permission set. * * @param {String} pPermissionSetId the id of the parent permission set * * @result {String[]} array with the ids of every subordinated permission action. The result can never be null. */ -PermissionUtil.getAllChildPermissionActions = function (pPermissionSetId) -{ - return db.array(db.COLUMN, SqlCondition.begin() - .and("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = '" + pPermissionSetId + "'") - .buildSql("select ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION" - + " join ASYS_PERMISSION on ASYS_PERMISSION.ASYS_PERMISSIONID = ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID") - , alias); -} + PermissionUtil.getAllChildPermissionActions = function (pPermissionSetId) + { + return db.array(db.COLUMN, SqlCondition.begin() + .and("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = '" + pPermissionSetId + "'") + .buildSql("select ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION" + + " join ASYS_PERMISSION on ASYS_PERMISSION.ASYS_PERMISSIONID = ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID") + , alias); + } -/** + /** * Returns all subordinated permission actions of a given permission. * * @param {String} pPermissionId the id of the parent permission * * @result {String[]} array with the ids of every subordinated permission action. The result can never be null. */ -PermissionUtil.getAllChildPermissionActions = function (pPermissionId) -{ - return db.array(db.COLUMN, SqlCondition.begin() - .and("ASYS_PERMISSION_ID = '" + pPermissionId + "'") - .buildSql("select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION") - , alias); -} + PermissionUtil.getAllChildPermissionActions = function (pPermissionId) + { + return db.array(db.COLUMN, SqlCondition.begin() + .and("ASYS_PERMISSION_ID = '" + pPermissionId + "'") + .buildSql("select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION") + , alias); + } -/** + /** * Returns the action a given permission action id. * * @param {String} pPermissionActionId the id of the action * * @result {String} action name as readable string of the given permission action id. Never 'null', empty string if there is no result. */ -PermissionUtil.resolvePermissionActionId = function (pPermissionActionId) -{ - return db.cell(SqlCondition.begin() - .and("ASYS_PERMISSIONACTIONID = '" + pPermissionActionId + "'") - .buildSql("select ASYS_PERMISSIONACTION.ACTION from ASYS_PERMISSIONACTION") - , alias); -} + PermissionUtil.resolvePermissionActionId = function (pPermissionActionId) + { + return db.cell(SqlCondition.begin() + .and("ASYS_PERMISSIONACTIONID = '" + pPermissionActionId + "'") + .buildSql("select ASYS_PERMISSIONACTION.ACTION from ASYS_PERMISSIONACTION") + , alias); + } -/** + /** * 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 */ -PermissionUtil.convertArrToObj = function(pArr) { - var ret = pArr.map(function(x) { - return { - "permissionid": x[0], - "entity": x[1], - "role": x[2], - "field": x[3], - "cond": x[4], - "action": x[5], - "accesstype": x[6], - "condtype": x[7] - } - }); - return ret; -} + PermissionUtil.convertArrToObj = function(pArr) { + var ret = pArr.map(function(x) { + return { + "permissionid": x[0], + "entity": x[1], + "role": x[2], + "field": x[3], + "cond": x[4], + "action": x[5], + "accesstype": x[6], + "condtype": x[7] + } + }); + return ret; + } -/** + /** * Returns the first index at which a given permissionid can be found in the array, or -1 if it is not present. * * @param {String} pPermId the id of the permission @@ -139,16 +139,16 @@ PermissionUtil.convertArrToObj = function(pArr) { * * @result {int} returns the position (index) of the searched permission in the table, otherwise returns -1 if not found */ -PermissionUtil.indexOfPermId = function(pPermTable, pPermId) { - var notFound = -1; - for (var i = 0; i < pPermTable.length; i++) { - if(pPermTable[i].permissionid == pPermId) - return i; + PermissionUtil.indexOfPermId = function(pPermTable, pPermId) { + var notFound = -1; + for (var i = 0; i < pPermTable.length; i++) { + if(pPermTable[i].permissionid == pPermId) + return i; + } + return notFound; } - return notFound; -} -/** + /** * Checks a permission if the given actions are different to the actions in the database. * * @param {String} pPermId permission id to which the actions are linked to @@ -157,14 +157,14 @@ PermissionUtil.indexOfPermId = function(pPermTable, pPermId) { * * @result {String[]} returns the different elements */ -PermissionUtil.getActionDiff = function(pPermId, pActionNew) { - var sqlStr = "select ACTION from ASYS_PERMISSIONACTION where ASYS_PERMISSION_ID = '" + pPermId + "'"; - var actionOld = db.array(db.COLUMN, sqlStr, alias); + PermissionUtil.getActionDiff = function(pPermId, pActionNew) { + var sqlStr = "select ACTION from ASYS_PERMISSIONACTION where ASYS_PERMISSION_ID = '" + pPermId + "'"; + var actionOld = db.array(db.COLUMN, sqlStr, alias); - return arrDiff(actionOld, pActionNew); -} + return arrDiff(actionOld, pActionNew); + } -/** + /** * Checks if the given string is different to the string of a column in the given database table. * * @param {String} pId the id @@ -177,13 +177,13 @@ PermissionUtil.getActionDiff = function(pPermId, pActionNew) { * * @result {Boolean} returns true if different, otherwise false */ -PermissionUtil.isDiff = function(pId, pString, pDbCol, pDbTable) { - var sqlStr = "select " + pDbCol + " from " + pDbTable + " where " + pDbTable + "ID = '" + pId + "'"; - var stringDb = db.cell(sqlStr, alias); - return stringDb != pString ? true : false; -} + PermissionUtil.isDiff = function(pId, pString, pDbCol, pDbTable) { + var sqlStr = "select " + pDbCol + " from " + pDbTable + " where " + pDbTable + "ID = '" + pId + "'"; + var stringDb = db.cell(sqlStr, alias); + return stringDb != pString ? true : false; + } -/** + /** * Updates the value of the column in table if the values are different. * * @param {String} pId the id @@ -196,114 +196,114 @@ PermissionUtil.isDiff = function(pId, pString, pDbCol, pDbTable) { * * @result {Integer} number of records that were updated */ -PermissionUtil.updateIfDiff = function(pId, pValue, pDbCol, pDbTable) { - if (PermissionUtil.isDiff(pId, pValue, pDbCol, pDbTable)) { - var cols = [pDbCol]; - var vals = [pValue]; - var cond = SqlCondition.begin().and(pDbTable + "ID = '" + pId + "'").build(); - return db.updateData(pDbTable, cols, null, vals, cond, alias); - } - return 0; -} + PermissionUtil.updateIfDiff = function(pId, pValue, pDbCol, pDbTable) { + if (PermissionUtil.isDiff(pId, pValue, pDbCol, pDbTable)) { + var cols = [pDbCol]; + var vals = [pValue]; + var cond = SqlCondition.begin().and(pDbTable + "ID = '" + pId + "'").build(); + return db.updateData(pDbTable, cols, null, vals, cond, alias); + } + return 0; + } -/** + /** * Gets the number of permissions which are linked to the given entity. * * @param {String} pEntityName The name of the entity * * @result {Integer} returns the number of permissions linked to the entity. */ -PermissionUtil.getNumberOfPermissions = function(pEntityName) { - var table = "ASYS_PERMISSIONSET"; - var sqlStr = "select COUNT(*) from " + table + " where ENTITY_ID = '" + pEntityName + "'"; - return db.cell(sqlStr, alias); -} + PermissionUtil.getNumberOfPermissions = function(pEntityName) { + var table = "ASYS_PERMISSIONSET"; + var sqlStr = "select COUNT(*) from " + table + " where ENTITY_ID = '" + pEntityName + "'"; + return db.cell(sqlStr, alias); + } -/** + /** * Gets the default permission of the root permission set. * * @param {String} pPermId the id of the permission * * @result {String} returns the id of the default permission of the root permission set. Never 'null', empty string if there is no result. */ -PermissionUtil.getRootPermission = function(pPermId) { - var sqlStr = "select ASYS_PERMISSIONSET_ID from ASYS_PERMISSION where ASYS_PERMISSIONID = '" + pPermId + "'"; - var parentPermSet = db.array(db.ROW, sqlStr, alias); + PermissionUtil.getRootPermission = function(pPermId) { + var sqlStr = "select ASYS_PERMISSIONSET_ID from ASYS_PERMISSION where ASYS_PERMISSIONID = '" + pPermId + "'"; + var parentPermSet = db.array(db.ROW, sqlStr, alias); - while (parentPermSet[0] != "") { - sqlStr = "select ASYS_PERMISSIONSET_ID, ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET where ASYS_PERMISSIONSETID = '" + parentPermSet[0] + "'"; - parentPermSet = db.array(db.ROW, sqlStr, alias); - } + while (parentPermSet[0] != "") { + sqlStr = "select ASYS_PERMISSIONSET_ID, ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET where ASYS_PERMISSIONSETID = '" + parentPermSet[0] + "'"; + parentPermSet = db.array(db.ROW, sqlStr, alias); + } - sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION where ASYS_PERMISSIONSET_ID = '" + parentPermSet[1] + "'"; - return db.cell(sqlStr, alias); -} + sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION where ASYS_PERMISSIONSET_ID = '" + parentPermSet[1] + "'"; + return db.cell(sqlStr, alias); + } -/** + /** * Gets the default field permission of the root field permission set. * * @param {String} pPermId the id of the field permission * * @result {String} returns the id of the default field permission of the root field permission set. Never 'null', empty string if there is no result. */ -PermissionUtil.getRootFieldPermission = function(pPermId) { - var sqlStr = "select ASYS_PERMISSIONSET_ID from ASYS_PERMISSION where ASYS_PERMISSIONID = '" + pPermId + "'"; - var parentFieldPermSet = db.array(db.ROW, sqlStr, alias); + PermissionUtil.getRootFieldPermission = function(pPermId) { + var sqlStr = "select ASYS_PERMISSIONSET_ID from ASYS_PERMISSION where ASYS_PERMISSIONID = '" + pPermId + "'"; + var parentFieldPermSet = db.array(db.ROW, sqlStr, alias); - sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION where ASYS_PERMISSIONSET_ID = '" + parentFieldPermSet + "' and cond is null"; - return db.cell(sqlStr, alias); -} + sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION where ASYS_PERMISSIONSET_ID = '" + parentFieldPermSet + "' and cond is null"; + return db.cell(sqlStr, alias); + } -/** + /** * Gets the default permission of a given permission set. * * @param {String} pPermSetId the id of the permission set * * @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 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\":[]}}"; + PermissionUtil.getDefaultPermission = function(pPermSetId) { + 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 or COND like '%" + noCond + "%')"; - return db.cell(sqlStr, alias); -} + sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION" + + " where ASYS_PERMISSIONSET_ID = '" + pPermSetId + "'" + + " and (COND is null or COND like '%" + noCond + "%')"; + return db.cell(sqlStr, alias); + } -/** + /** * Gets the conditional permissions of a given permission set. * * @param {String} pPermSetId the id of the permission set * * @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 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\":[]}}"; + PermissionUtil.getConditionalPermission = function(pPermSetId) { + 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 not like '" + noCond + "'"; - return db.table(sqlStr, alias); -} + sqlStr = "select ASYS_PERMISSIONID from ASYS_PERMISSION" + + " where ASYS_PERMISSIONSET_ID = '" + pPermSetId + "'" + + " and COND is not null and COND not like '" + noCond + "'"; + return db.table(sqlStr, alias); + } -/** + /** * Gets the permission actions of a given permission. * * @param {String} pPermId the id of the permission * * @result {String[]} returns the ids of linked actions of a given permission. The result can never be null. */ -PermissionUtil.getPermissionAction = function(pPermId) { - var sqlStr = "select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION" - + " where ASYS_PERMISSION_ID = '" + pPermId + "'" - return db.table(sqlStr, alias); -} + PermissionUtil.getPermissionAction = function(pPermId) { + var sqlStr = "select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION" + + " where ASYS_PERMISSION_ID = '" + pPermId + "'" + return db.table(sqlStr, alias); + } -/** + /** * Gets the permission set id of a given role-entity-accesstype-combination. * * @param {String} pRole the name of the role @@ -316,16 +316,16 @@ PermissionUtil.getPermissionAction = function(pPermId) { * * @result {String} returns the id of the matching permission set. The result can never be null. */ -PermissionUtil.getPermissionSet = function(pRole, pEntity, pAccessType, pField) { - var sqlStr = "select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET" - + " where ROLE_ID = '" + pRole + "' and ENTITY_ID = '" + pEntity + "' and ACCESSTYPE = '" + pAccessType + "'"; - if (pField != null && pField != "" && pField != undefined) { - sqlStr += " and FIELD_ID = '" + pField + "'"; + PermissionUtil.getPermissionSet = function(pRole, pEntity, pAccessType, pField) { + var sqlStr = "select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET" + + " where ROLE_ID = '" + pRole + "' and ENTITY_ID = '" + pEntity + "' and ACCESSTYPE = '" + pAccessType + "'"; + if (pField != null && pField != "" && pField != undefined) { + sqlStr += " and FIELD_ID = '" + pField + "'"; + } + return db.cell(sqlStr, alias); } - return db.cell(sqlStr, alias); -} -/** + /** * Gets the root permission set of a entity-role-combination. * * @param {String} pRole the id of a role @@ -334,76 +334,76 @@ PermissionUtil.getPermissionSet = function(pRole, pEntity, pAccessType, pField) * * @result {String} returns the id of the root permission set of the given entity-role-combination. Never 'null', empty string if there is no result. */ -PermissionUtil.getRootPermissionSet = function(pRole, pEntity) { - var sqlStr = "select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET" - + " where ROLE_ID = '" + pRole + "' and ENTITY_ID = '" + pEntity +"' and ACCESSTYPE = 'E'"; - return db.cell(sqlStr, alias); -} + PermissionUtil.getRootPermissionSet = function(pRole, pEntity) { + var sqlStr = "select ASYS_PERMISSIONSETID from ASYS_PERMISSIONSET" + + " where ROLE_ID = '" + pRole + "' and ENTITY_ID = '" + pEntity +"' and ACCESSTYPE = 'E'"; + return db.cell(sqlStr, alias); + } -/** + /** * Gets the parent permission set of a permission. * * @param {String} pPermId the id of the permission * * @result {String} returns the id of the parent permission set of the given permission. Never 'null', empty string if there is no result. */ -PermissionUtil.getParentPermissionSet = function(pPermId) { - var sqlStr = "select ASYS_PERMISSIONSET_ID from ASYS_PERMISSION" - + " where ASYS_PERMISSIONID = '" + pPermId + "'"; - return db.cell(sqlStr, alias); -} + PermissionUtil.getParentPermissionSet = function(pPermId) { + var sqlStr = "select ASYS_PERMISSIONSET_ID from ASYS_PERMISSION" + + " where ASYS_PERMISSIONID = '" + pPermId + "'"; + return db.cell(sqlStr, alias); + } -/** + /** * Checks if the given permission has any children left. * * @param {String} pPermSetId the id of the permission set * * @result {Boolean} returns true if permission set has no children, otherwise false */ -PermissionUtil.permSetIsEmpty = function(pPermSetId) { - var subSets = PermissionUtil.getAllChildPermissionSets(pPermSetId); - var subPerms = PermissionUtil.getAllChildPermissions(pPermSetId); - var subActions = PermissionUtil.getAllChildPermissionActions(pPermSetId); + PermissionUtil.permSetIsEmpty = function(pPermSetId) { + var subSets = PermissionUtil.getAllChildPermissionSets(pPermSetId); + var subPerms = PermissionUtil.getAllChildPermissions(pPermSetId); + var subActions = PermissionUtil.getAllChildPermissionActions(pPermSetId); - if (subActions.length == 0 && subPerms == 0 && subSets == 0) - return true; - return false; -} + if (subActions.length == 0 && subPerms == 0 && subSets == 0) + return true; + return false; + } -/** + /** * Returns all permissions of the given permission sets. * * @param {String[]} pPermSetIds the ids of the permission sets * * @result {String[]} returns ids of all permissions. The result can never be null. */ -PermissionUtil.getAllPermissions = function(pPermSetIds) { - return db.table("select ASYS_PERMISSIONID from ASYS_PERMISSION where ASYS_PERMISSION.ASYS_PERMISSIONSET_ID in ('" + pPermSetIds.join("','") + "')", alias); -} + PermissionUtil.getAllPermissions = function(pPermSetIds) { + return db.table("select ASYS_PERMISSIONID from ASYS_PERMISSION where ASYS_PERMISSION.ASYS_PERMISSIONSET_ID in ('" + pPermSetIds.join("','") + "')", alias); + } -/** + /** * Returns all permission actions of the given permissions. * * @param {String[]} pPermIds the ids of the permissions * * @result {String[]} returns ids of all permission actions. The result can never be null. */ -PermissionUtil.getAllPermissionActions = function(pPermIds) { - return db.table("select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION where ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID in ('" + pPermIds.join("','") + "')", alias); -} + PermissionUtil.getAllPermissionActions = function(pPermIds) { + return db.table("select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION where ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID in ('" + pPermIds.join("','") + "')", alias); + } -/** + /** * Returns the condition type of the given permissions. * * @param {String} pPermId the id of the permission * * @result {String} returns the value of condition type (true or false). Never 'null', empty string if there is no result. */ -PermissionUtil.getPermissionCondType = function(pPermId) { - return db.cell("select CONDTYPE from ASYS_PERMISSION where ASYS_PERMISSION.ASYS_PERMISSIONID = '" + pPermId + "'", alias); -} + PermissionUtil.getPermissionCondType = function(pPermId) { + return db.cell("select CONDTYPE from ASYS_PERMISSION where ASYS_PERMISSION.ASYS_PERMISSIONID = '" + pPermId + "'", alias); + } -/** + /** * Inserts a new instance of a permission set into ASYS_PERMISSIONSET. * * @param {String} pParentPermSet The parent permission set, empty if root node @@ -418,16 +418,16 @@ PermissionUtil.getPermissionCondType = function(pPermId) { * * @result {Integer} returns the id of the inserted permission set */ -PermissionUtil.insertNewPermissionSet = function(pParentPermSet, pEntity, pRole, pField, pAccessType) { - var table = "ASYS_PERMISSIONSET"; - var cols = db.getColumns(table, alias); - var permsetid = util.getNewUUID(); - var vals = [pAccessType, permsetid, pParentPermSet, pEntity, pField, pRole]; - db.insertData(table, cols, null, vals, alias); - return permsetid; -} + PermissionUtil.insertNewPermissionSet = function(pParentPermSet, pEntity, pRole, pField, pAccessType) { + var table = "ASYS_PERMISSIONSET"; + var cols = db.getColumns(table, alias); + var permsetid = util.getNewUUID(); + var vals = [pAccessType, permsetid, pParentPermSet, pEntity, pField, pRole]; + db.insertData(table, cols, null, vals, alias); + return permsetid; + } -/** + /** * Inserts a new instance of a permission into ASYS_PERMISSION. * * @param {String} pParentPermSet The parent permission set, mandatory @@ -440,21 +440,21 @@ PermissionUtil.insertNewPermissionSet = function(pParentPermSet, pEntity, pRole, * * @result {Integer} returns the id of the inserted permission */ -PermissionUtil.insertNewPermission = function(pParentPermSet, pCond, pCondType, pPermId) { - var table = "ASYS_PERMISSION"; - var cols = db.getColumns(table, alias); - var permId; - if (pPermId != null && pPermId != "" && pPermId != undefined) { - permId = pPermId; - } else { - permId = util.getNewUUID(); - } - var vals = [permId, pParentPermSet, pCond, pCondType]; - db.insertData(table, cols, null, vals, alias); - return permId; -} + PermissionUtil.insertNewPermission = function(pParentPermSet, pCond, pCondType, pPermId) { + var table = "ASYS_PERMISSION"; + var cols = db.getColumns(table, alias); + var permId; + if (pPermId != null && pPermId != "" && pPermId != undefined) { + permId = pPermId; + } else { + permId = util.getNewUUID(); + } + var vals = [permId, pParentPermSet, pCond, pCondType]; + db.insertData(table, cols, null, vals, alias); + return permId; + } -/** + /** * Inserts a new instance of a permission action into ASYS_PERMISSIONACTION. * * @param {String} pParentPerm The parent permission, mandatory @@ -465,31 +465,11 @@ PermissionUtil.insertNewPermission = function(pParentPermSet, pCond, pCondType, * * @result {Integer} returns the id of the inserted permission action, returns null if insert was not possible */ -PermissionUtil.insertNewPermissionAction = function(pParentPerm, pAction, pActionId) { - var table = "ASYS_PERMISSIONACTION"; - var cols = db.getColumns(table, alias); - var permactionid; - - var actions = PermissionUtil.getPermissionAction(pParentPerm); - var sqlStr = "select ACCESSTYPE from ASYS_PERMISSIONSET where ASYS_PERMISSIONSETID = '" + PermissionUtil.getParentPermissionSet(pParentPerm) + "'"; - var accesstype = db.cell(sqlStr, alias); - var insertIsAllowed = true; - - switch (accesstype) { - case "R": - if (actions.length >= 3) { - insertIsAllowed = false; - } - break; - default: - if (actions.length >= 2) { - insertIsAllowed = false; - } - break; - } - - if (insertIsAllowed) { - sqlStr = "select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION where ASYS_PERMISSIONACTIONID = '" + pActionId + "'"; // if same id is already in db -> create new UID + PermissionUtil.insertNewPermissionAction = function(pParentPerm, pAction, pActionId) { + var table = "ASYS_PERMISSIONACTION"; + var cols = db.getColumns(table, alias); + var permactionid; + var sqlStr = "select ASYS_PERMISSIONACTIONID from ASYS_PERMISSIONACTION where ASYS_PERMISSIONACTIONID = '" + pActionId + "'"; // if same id is already in db -> create new UID if (pActionId != null & pActionId != "" && pActionId != undefined && db.cell(sqlStr, alias) == "") { permactionid = pActionId; @@ -497,42 +477,76 @@ PermissionUtil.insertNewPermissionAction = function(pParentPerm, pAction, pActio permactionid = util.getNewUUID(); } var vals = [pAction, permactionid, pParentPerm]; - db.insertData(table, cols, null, vals, alias); + if (db.insertData(table, cols, null, vals, alias) == 0) { + return null; + } return permactionid; } - return null; -} -/** + /** * Returns the cond type of a permission. * * @param {String} pPerm The permission, mandatory * * @result {Integer} returns the cond type of a permission */ -PermissionUtil.getCondType = function(pPerm) { - var table = "ASYS_PERMISSION"; - var sqlStr = "select CONDTYPE from " + table + " where ASYS_PERMISSIONID = '" + pPerm + "'"; - return db.cell(sqlStr, alias); -} + PermissionUtil.getCondType = function(pPerm) { + var table = "ASYS_PERMISSION"; + var sqlStr = "select CONDTYPE from " + table + " where ASYS_PERMISSIONID = '" + pPerm + "'"; + return db.cell(sqlStr, alias); + } -/** + /** * Returns true if the permission exists, otherwise false. * * @param {String} pPermId The permission id * * @result {Boolean} true if permission exists, otherwise false */ -PermissionUtil.existsPermission = function(pPermId) { - var table = "ASYS_PERMISSION"; - var sqlStr = "select COUNT(*) from " + table + " where ASYS_PERMISSIONID = '" + pPermId + "'"; - if (db.cell(sqlStr, alias) != "0") { - return true; + PermissionUtil.existsPermission = function(pPermId) { + var table = "ASYS_PERMISSION"; + var sqlStr = "select COUNT(*) from " + table + " where ASYS_PERMISSIONID = '" + pPermId + "'"; + if (db.cell(sqlStr, alias) != "0") { + return true; + } + return false; + } + + /** + * Returns true if the action exists, otherwise false. + * + * @param {String} pActionId The id of the action + * + * @result {Boolean} true if action exists, otherwise false + */ + PermissionUtil.actionExists = function(pActionId) { + var table = "ASYS_PERMISSIONACTION"; + var sqlStr = "select COUNT(*) from " + table + " where ASYS_PERMISSION_ID = '" + pActionId + "'"; + if (db.cell(sqlStr, alias) != "0") { + return true; + } + return false; } - return false; -} -/** + /** + * Returns true if the action exists, otherwise false. + * + * @param {String} pAction The title of the action (e.g. view, create, read, update, delete) + * + * @param {String} pPermId The ID of the permission to which the action is linked + * + * @result {Boolean} true if action exists, otherwise false + */ + PermissionUtil.actionExists = function(pAction, pPermId) { + var table = "ASYS_PERMISSIONACTION"; + var sqlStr = "select COUNT(*) from " + table + " where ACTION = '" + pAction + "' and ASYS_PERMISSION_ID = '" + pPermId + "'"; + if (db.cell(sqlStr, alias) != "0") { + return true; + } + return false; + } + + /** * Returns permissionid of the permission with fitting parameters, otherwise returns empty string * * @param {String} pRole Name of the role @@ -550,47 +564,47 @@ PermissionUtil.existsPermission = function(pPermId) { * @result {String} Returns the id of the permission with fitting parameters, otherwise returns empty string, can never be null * */ -PermissionUtil.getPermission = function(pRole, pEntity, pField, pAccesstype, pCondition, pCondtype) { - var sqlStr = ""; - var sqlExt = ""; - var noCond = "{\"entity\":\"" + pEntity + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}"; + PermissionUtil.getPermission = function(pRole, pEntity, pField, pAccesstype, pCondition, pCondtype) { + var sqlStr = ""; + var sqlExt = ""; + var noCond = "{\"entity\":\"" + pEntity + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}"; - if (checkInput([pCondition])) { - if (pCondition == noCond) { - sqlExt += " and (COND like '%" + pCondition + "%' or COND is null)"; - } else { - sqlExt += " and COND like '%" + pCondition + "%'"; + if (checkInput([pCondition])) { + if (pCondition == noCond) { + sqlExt += " and (COND like '%" + pCondition + "%' or COND is null)"; + } else { + sqlExt += " and COND like '%" + pCondition + "%'"; + } } - } - if (checkInput([pField])) { - sqlExt += " and FIELD_ID = '" + pField + "'"; - } + if (checkInput([pField])) { + sqlExt += " and FIELD_ID = '" + pField + "'"; + } - if (checkInput([pCondtype])) { - sqlExt += " and CONDTYPE = '" + pCondtype + "'"; - } + if (checkInput([pCondtype])) { + sqlExt += " and CONDTYPE = '" + pCondtype + "'"; + } - sqlStr = "select ASYS_PERMISSION.ASYS_PERMISSIONID from ASYS_PERMISSIONSET" - + " join ASYS_PERMISSION on ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID" - + " where ENTITY_ID = '" + pEntity + "' and ROLE_ID = '" + pRole + "'" - + " and ACCESSTYPE = '" + pAccesstype + "'" + sqlExt; - var permId = db.cell(sqlStr, alias); - return permId; -} + sqlStr = "select ASYS_PERMISSION.ASYS_PERMISSIONID from ASYS_PERMISSIONSET" + + " join ASYS_PERMISSION on ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID" + + " where ENTITY_ID = '" + pEntity + "' and ROLE_ID = '" + pRole + "'" + + " and ACCESSTYPE = '" + pAccesstype + "'" + sqlExt; + var permId = db.cell(sqlStr, alias); + return permId; + } -/** + /** * Deletes a permission action from ASYS_PERMISSIONACTION. * * @param {String} pPermActionId The permission action id which should be deleted, mandatory * * @result {Integer} returns the number of deleted records */ -PermissionUtil.deletePermissionAction = function(pPermActionId) { - var table = "ASYS_PERMISSIONACTION"; - var cond = " ASYS_PERMISSIONACTIONID = '" + pPermActionId + "'"; - return db.deleteData(table, cond, alias); -} + PermissionUtil.deletePermissionAction = function(pPermActionId) { + var table = "ASYS_PERMISSIONACTION"; + var cond = " ASYS_PERMISSIONACTIONID = '" + pPermActionId + "'"; + return db.deleteData(table, cond, alias); + } } //end of block