Skip to content
Snippets Groups Projects
contentProcess.js 6.73 KiB
import("Sql_lib");
import("system.project");
import("system.vars");
import("system.result");
import("system.db");
import("Permission_lib");

var res = [];
var roleName = "";
var entityName = "";
let alias = SqlUtils.getSystemAlias();
var roleInternalEveryone = "INTERNAL_EVERYONE";

var entitiesMetaData = project.getDataModels(project.DATAMODEL_KIND_ENTITY);
var entitiesUsePermFlagSet = []; // array, which contains ids of entities with usePermission flag set

// gets all names of the entites which have the 'usePermission'-flag set (positive list)
for each (let entityMetaData in entitiesMetaData) {
    if (entityMetaData[6] == "true") {
        entitiesUsePermFlagSet.push(entityMetaData[0]);
    }
}

var rolesOrEntitiesSelect = new SqlBuilder(alias).where();
var rolesOrEntities = [];

if (vars.exists("$param.RoleTitle_param") && vars.get("$param.RoleTitle_param")) {
    roleName = vars.getString("$param.RoleTitle_param");
    if (roleName == roleInternalEveryone) {
        var counter = 0;
        for each (let entityUsePermFlagSet in entitiesUsePermFlagSet) {
            if (PermissionUtil.getNumberOfPermissions(entityUsePermFlagSet, roleName) == 0) {
                // no permissions for INTERNAL_EVERYONE found -> display X's for all actions
                res.push(["NOREALPERMINDB" + counter++, entityUsePermFlagSet, "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE"]);
            }
        }
    }
    rolesOrEntitiesSelect.select("distinct ASYS_PERMISSIONSET.ENTITY_ID")
        .from("ASYS_PERMISSIONSET")
        .and("ASYS_PERMISSIONSET.ROLE_ID", roleName);
} else if (vars.exists("$param.EntityTitle_param") && vars.get("$param.EntityTitle_param")) {
    entityName = vars.getString("$param.EntityTitle_param");
    if (PermissionUtil.getNumberOfPermissions(entityName, roleInternalEveryone) == 0) {
        // no permissions for INTERNAL_EVERYONE found -> display X's for all actions
        res.push(["NOREALPERMINDB", roleInternalEveryone, "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE"]);
    }
    rolesOrEntitiesSelect.select("distinct ASYS_PERMISSIONSET.ROLE_ID")
        .from("ASYS_PERMISSIONSET")
        .and("ASYS_PERMISSIONSET.ENTITY_ID", entityName);
}

rolesOrEntities = rolesOrEntitiesSelect
    .and("ASYS_PERMISSIONSET.ENTITY_ID", entitiesUsePermFlagSet, SqlBuilder.IN())
    .arrayColumn();

var entityPermSetId = "";
for each (var entry in rolesOrEntities) { // entry contains either a role or an entity, depending on which param exists
    if (vars.exists("$param.RoleTitle_param") && vars.get("$param.RoleTitle_param")) {
        entityPermSetId = PermissionUtil.getSetRoot(roleName, entry);
    } else if (vars.exists("$param.EntityTitle_param") && vars.get("$param.EntityTitle_param")) {
        entityPermSetId = PermissionUtil.getSetRoot(entry, entityName);
    }
    var recordPermSetId = newSelect("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID", alias)
    .from("ASYS_PERMISSIONSET")
    .where("ASYS_PERMISSIONSET.ASYS_PERMISSIONSET_ID", entityPermSetId)
    .and("ASYS_PERMISSIONSET.ACCESSTYPE", 'R')
    .arrayColumn();
    var currOverview = [entityPermSetId, entry, "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE"];

    if (entityPermSetId)
    {
        var recordPermSetId = new SqlBuilder(alias)
                                .select("ASYS_PERMISSIONSETID")
                                .from("ASYS_PERMISSIONSET")
                                .where("ASYS_PERMISSIONSET.ASYS_PERMISSIONSET_ID", entityPermSetId)
                                .and("ACCESSTYPE = 'R'")
                                .arrayColumn();

        var currOverview = [entityPermSetId, entry, "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE", "VAADIN:CLOSE"];

        // default entity permissions
        currOverview = prepareOverview(entityPermSetId, currOverview, "default");

        // conditional record permissions
        currOverview = prepareOverview(recordPermSetId, currOverview, "conditional");

        // default record permissions
        currOverview = prepareOverview(recordPermSetId, currOverview, "default");

        res.push(currOverview);
    }
}
result.object(res);

function prepareOverview(pPermSetId, pCurrOverview, pMode) {
    var conditionalPermActionId = [], currOverview;
    switch (pMode) {
        case "default":
            var permId = PermissionUtil.getPermissionWithoutCond(pPermSetId);
            var defaultPermActionId = PermissionUtil.getActions([permId]);
            currOverview = pCurrOverview;
    
            if (PermissionUtil.getCondType(permId) == 1 ) {
                for each (let actionSets in defaultPermActionId) {
                    switch (PermissionUtil.resolveActionId(actionSets)) {
                        case "view":
                            currOverview[2] = "VAADIN:CIRCLE";
                            break;
                        case "create":
                            currOverview[3] = "VAADIN:CIRCLE";
                            break;
                        case "read":
                            currOverview[4] = "VAADIN:CIRCLE";
                            break;
                        case "update":
                            currOverview[5] = "VAADIN:CIRCLE";
                            break;
                        case "delete":
                            currOverview[6] = "VAADIN:CIRCLE";
                            break;
                    }
                }
            }
            break;
        case "conditional":
            var permIds = PermissionUtil.getPermissionWithCond(pPermSetId);
            
            permIds.forEach(function(permId) {
                conditionalPermActionId.push(PermissionUtil.getActions([permId]));
            });
           
            currOverview = pCurrOverview;
            
            for each (let actionSets in conditionalPermActionId) {
                for each (let action in actionSets) {
                    switch (PermissionUtil.resolveActionId(action)) {
                        case "view":
                            currOverview[2] = "VAADIN:CIRCLE_THIN";
                            break;
                        case "create":
                            currOverview[3] = "VAADIN:CIRCLE_THIN";
                            break;
                        case "read":
                            currOverview[4] = "VAADIN:CIRCLE_THIN";
                            break;
                        case "update":
                            currOverview[5] = "VAADIN:CIRCLE_THIN";
                            break;
                        case "delete":
                            currOverview[6] = "VAADIN:CIRCLE_THIN";
                            break;
                    }
                }
            }
            break;
    }
    return currOverview;
}