Skip to content
Snippets Groups Projects
Commit 86b5a400 authored by Simon Leipold's avatar Simon Leipold
Browse files

Permissions - onDelete deletes now also all subordinated permissions

parent cbcd8dcd
No related branches found
No related tags found
No related merge requests found
import("system.logging");
import("system.tools");
import("Sql_lib");
import("system.neon");
......@@ -10,6 +11,7 @@ var permId = vars.get("$field.UID");
var accessType = vars.get("$field.ACCESSTYPE");
var parentPermSetId = PermissionUtil.getParentSet(permId);
var linkedActions = PermissionUtil.getActions([permId]);
var noCond = "{\"entity\":\"" + vars.get("$field.ENTITY") + "\",\"filter\":{\"type\":\"group\",\"operator\":\"AND\",\"childs\":[]}}";
var sqlCondDelAction = SqlCondition.begin()
.and("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID in ('" + linkedActions.join("','") + "')")
......@@ -23,10 +25,10 @@ var sqlCondDelPermSet = SqlCondition.begin()
switch (accessType) {
case "E":
var allPermSets = PermissionUtil.getChildSetsOfSet(parentPermSetId);
let allPermSets = PermissionUtil.getChildSetsOfSet(parentPermSetId);
allPermSets.push(parentPermSetId);
var allPerms = PermissionUtil.getPermissions(allPermSets);
var allPermActions = PermissionUtil.getActions(allPerms);
let allPerms = PermissionUtil.getPermissions(allPermSets);
let allPermActions = PermissionUtil.getActions(allPerms);
sqlCondDelAction = SqlCondition.begin()
.and("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID in ('" + allPermActions.join("','") + "')")
......@@ -43,8 +45,26 @@ switch (accessType) {
db.deleteData("ASYS_PERMISSIONSET", sqlCondDelPermSet, alias); // delete all permission sets
break;
default:
db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction, alias); // delete all actions of the selected permission
db.deleteData("ASYS_PERMISSION", sqlCondDelPerm, alias); // delete the selected permission
if (PermissionUtil.getCond(permId) == "" || PermissionUtil.getCond(permId) == noCond) { // 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 = SqlCondition.begin()
.and("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID in ('" + allActions.join("','") + "')")
.build();
sqlCondDelPerm = SqlCondition.begin()
.and("ASYS_PERMISSION.ASYS_PERMISSIONID in ('" + allPerms.join("','") + "')")
.build();
db.deleteData("ASYS_PERMISSIONACTION", sqlCondDelAction, alias); // delete all actions of the selected permission
db.deleteData("ASYS_PERMISSION", sqlCondDelPerm, alias); // delete the selected permission
} else {
// conditional permission -> only delete this 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;
}
......
......@@ -431,6 +431,19 @@ function PermissionUtil () {}
var sqlStr = "select CONDTYPE from " + table + " where ASYS_PERMISSIONID = '" + pPermId + "'";
return db.cell(sqlStr, alias);
}
/**
* Returns the condition of a permission.
*
* @param {String} pPermId id of the permission which condition should be returned, mandatory
*
* @result {String} returns the condition of a permission
*/
PermissionUtil.getCond = function(pPermId) {
var table = "ASYS_PERMISSION";
var sqlStr = "select COND from " + table + " where ASYS_PERMISSIONID = '" + pPermId + "'";
return db.cell(sqlStr, alias);
}
/**
* Returns true if the permission exists, otherwise false.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment