Name
global.CSMResponsibilityModelUtil
Description
No description available
Script
var CSMResponsibilityModelUtil = Class.create();
CSMResponsibilityModelUtil.prototype = {
initialize: function() {
},
type: 'CSMResponsibilityModelUtil'
};
CSMResponsibilityModelUtil._getResponsibilitiesFromTargetEntityParents = function(relationship, accessLevel, targetEntity) {
var responsibilities = null;
var tu = new global.TableUtils(targetEntity);
var targetEntityParentTables = j2js(tu.getTables());
//first entry in targetEntityParentTables will be the target entity itself.
for (var j = 1; j < targetEntityParentTables.length; j++) {
responsibilityPath = [relationship, targetEntityParentTables[j], accessLevel];
responsibilities = global.CSMRelationshipUtils.prototype.getSafely(global.CSMRelationshipConstants.RELATIONSHIPS, responsibilityPath);
if (!gs.nil(responsibilities)) {
break;
}
}
return responsibilities;
};
CSMResponsibilityModelUtil.getResponsibilities = function(relationship, accessLevel, accessRoles, skipRoleCheck, targetEntity, applicableTo, restrictAccessTo) {
// If accessLevel is not passed, default it to READ
accessLevel = accessLevel || global.CSMRelationshipConstants.ACCESS.READ;
var respCacheUtil = new global.ResponsibilityAccessConfigCacheUtil();
// Return responsibilities based on responsibility access configuration if record(s) exist
if (respCacheUtil.hasAccessConfigRecord(relationship, accessLevel, targetEntity) == true) {
return respCacheUtil.getResponsibilitiesFromCache(relationship, accessLevel, targetEntity, applicableTo, restrictAccessTo, skipRoleCheck);
}
// Fallback to existing CSMRelationshipConstants for responsibility access configuration
var responsibilityPath = [];
var relationshipHasTargetEntity = !gs.nil(targetEntity)? global.CSMRelationshipUtils.prototype.getSafely(global.CSMRelationshipConstants.RELATIONSHIPS, [relationship, global.CSMRelationshipConstants.HAS_TARGET_ENTITY]) : false;
if (gs.nil(targetEntity))
responsibilityPath = [relationship, accessLevel];
else if (relationshipHasTargetEntity)
responsibilityPath = [relationship, targetEntity, accessLevel];
else
return [];
var responsibilities = global.CSMRelationshipUtils.prototype.getSafely(global.CSMRelationshipConstants.RELATIONSHIPS, responsibilityPath);
if (gs.nil(responsibilities) && !gs.nil(targetEntity) && relationshipHasTargetEntity){
//current target entity did not have any configuration set, so falling back to it's parents.
responsibilities = CSMResponsibilityModelUtil._getResponsibilitiesFromTargetEntityParents(relationship, accessLevel, targetEntity);
}
if (gs.nil(responsibilities)) {
return [];
}
if(gs.nil(accessRoles))
accessRoles = {};
accessRoles.list = [];
var qualifiedResp = [];
var respToRoles = global.CSMRelationshipConstantsSNC.RESPONSIBILITY_ROLES[relationship];
//TODO: FIXME: Remove this check and return statement once roles are added to all the relationship types.
if(gs.nil(respToRoles) || Object.keys(respToRoles).length == 0)
return responsibilities;
for(var i=0, l= responsibilities.length; i < l; i++ ){
var responsibility = responsibilities[i];
var roles = respToRoles[responsibility];
if(gs.nil(roles))
continue;
accessRoles.list = accessRoles.list.concat(roles);
for(var p=0, q=roles.length; p < q; p++) {
var role = roles[p];
if(!gs.nil(role) && gs.hasRole(role)) {
qualifiedResp.push(responsibility);
break;
}
}
}
// Not returning early if skipRoleCheck is true to populate accessRoles, accessRoles might be used by the caller
return (skipRoleCheck) ? responsibilities : qualifiedResp;
};
Sys ID
74d4df1a773a3010d3ef07dc7d5a9929