Skip to content
Snippets Groups Projects
contentProcess.js 4.53 KiB
Newer Older
import("system.util");
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 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") 
    {
Simon Leipold's avatar
Simon Leipold committed
        entitiesUsePermFlagSet.push(entityMetaData[0]);
var rolesOrEntitiesSelect = new SqlBuilder(alias).where();
var rolesOrEntities = [];
Simon Leipold's avatar
Simon Leipold committed

if (vars.exists("$param.RoleName_param") && vars.get("$param.RoleName_param")) 
{
    roleName = vars.getString("$param.RoleName_param");
    rolesOrEntitiesSelect.select("distinct ASYS_PERMISSIONSET.ENTITY_ID")
        .from("ASYS_PERMISSIONSET")
        .and("ASYS_PERMISSIONSET.ROLE_ID", roleName);
} 
else if (vars.exists("$param.EntityId_param") && vars.get("$param.EntityId_param")) 
{
    entityName = vars.getString("$param.EntityId_param");
    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
    var overview = {
        uid: util.getNewUUID(), 
        entry: entry, 
        view: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
        create: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
        read: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
        update: PermissionEnums.FORBIDDEN_ACTION_ICON(), 
        "delete": PermissionEnums.FORBIDDEN_ACTION_ICON()
    };
    
    if (vars.exists("$param.RoleName_param") && vars.get("$param.RoleName_param"))
    {
        entityPermSetId = PermissionUtil.getSetRoot(roleName, entry);
    } 
    else if (vars.exists("$param.EntityId_param") && vars.get("$param.EntityId_param"))
    {
        entityPermSetId = PermissionUtil.getSetRoot(entry, entityName);
    if (entityPermSetId)
    {
        var recordPermSetId = PermissionUtil.getRecordSetOfEntitySet(entityPermSetId);
        
        // entity permissions
        overview = prepareOverview(entityPermSetId, overview);
        // record permissions
        overview = prepareOverview(recordPermSetId, overview);
        res.push([overview.uid, overview.entry, overview.view, overview.create, overview.read, overview.update, overview["delete"]]);

var order = vars.get("$local.order");
var columnOrder = {
    "ENTITY.value" : 1,
    "ACTION_VIEW.value" : 2,
    "ACTION_CREATE.value" : 3,
    "ACTION_READ.value" : 4,
    "ACTION_UPDATE.value" : 5,
    "ACTION_DELETE.value" : 6
};
var sortOrder = [];
for (let field in order)
{
    if (field in columnOrder)
    {
        sortOrder.push(columnOrder[field]);
        sortOrder.push(order[field] == "DOWN");
    }
}
if (!sortOrder.length) //sort by entity or role by default
    sortOrder = [1, false];

ArrayUtils.sortMulti(res, sortOrder);

result.object(res);

function prepareOverview(pPermSetId, pOverview) {
    if (!pPermSetId) { return pOverview; }
    
    var conditionalPermActionId = [];
    var overview = pOverview;

    var permId = PermissionUtil.getPermissionWithoutCond(pPermSetId);
    if (permId && permId != "")
    {
        var defaultPermActionId = PermissionUtil.getActions([permId]);
        if (PermissionUtil.getCondType(permId) == 1)
        {
            for each (let actionSets in defaultPermActionId)
            {
                overview[PermissionUtil.resolveActionId(actionSets)] = PermissionEnums.PERMITTED_ACTION_ICON();
        }       
    }

    var permIds = PermissionUtil.getPermissionWithCond(pPermSetId);
    
    if (permIds && permIds.length > 0)
    {
        for each (let permId in permIds)
        {
            conditionalPermActionId.push(PermissionUtil.getActions([permId]));
        }

        for each (let actionSets in conditionalPermActionId)
        {
            for each (let action in actionSets)
            {
                overview[PermissionUtil.resolveActionId(action)] = PermissionEnums.RESTRICTED_ACTION_ICON();

    return overview;