Skip to content
Snippets Groups Projects
valueProcess.js 1.70 KiB
import("system.SQLTYPES");
import("Sql_lib");
import("system.db");
import("system.vars");
import("system.result");
import("Permission_lib");

var alias = SqlUtils.getSystemAlias();
var rootPermId = "";
var entity = vars.get("$field.ENTITY");
var roleName = 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(roleName, entity, accesstype, field);
var fieldWhereCond = "ASYS_PERMISSIONSET.FIELD_ID is null";

if (field != "") {
    fieldWhereCond = newWhere("ASYS_PERMISSIONSET.FIELD_ID", field, null, null, alias);
}

if (permSetId != "") {
    // default permission
    if (cond == "" || cond == emptyCond) {
        rootPermId = PermissionUtil.getPermissionWithoutCond(permSetId);
    } else { // conditional permission
        var sqlHelper = new SqlMaskingUtils(alias);
        
        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(fieldWhereCond)
            .and("ASYS_PERMISSIONSET.ROLE_ID", roleName)
            .and("ASYS_PERMISSIONSET.ENTITY_ID", entity)
            .cell();
    }
    
    // return valid permId
    if (rootPermId != "") {
        result.string(rootPermId);
    } else {
        result.string(vars.get("$field.UID"));
    }
} else {
    result.string(vars.get("$field.UID"));
}