Name

sn_decision_table.UserUtil

Description

No description available

Script

var UserUtil = (function() {

  var isAdmin = gs.hasRole('admin');
  var isDecisionTableAdmin = gs.hasRole('decision_table_admin');
  var isDecisionTableReader = gs.hasRole('decision_table_reader');
  var isChangeManager = gs.hasRole('change_manager');

  return {

      // user gets delegated access if atleast one accessible scope has decision table permission
      hasDelegatedAccess: function() {
          var accessibleScopeIds = this._getAccessibleScopeIds();
          for (var i = 0; i < accessibleScopeIds.length; i++) {
              if (this._hasDecisionTablePermission(accessibleScopeIds[i])) {
                  return true;
              }
          }
          return false;
      },

      getScopeIdsAccessibleByDelegatedDev: function() {
          var accessibleScopeIds = this._getAccessibleScopeIds();
          var scopeIdsWithDecisionTablePermission = [];
          for (var i = 0; i < accessibleScopeIds.length; i++) {
              if (this._hasDecisionTablePermission(accessibleScopeIds[i])) {
                  scopeIdsWithDecisionTablePermission.push(accessibleScopeIds[i]);
              }
          }
          return scopeIdsWithDecisionTablePermission;
      },

      _hasDecisionTablePermission: function(sysId) {
          return gs.hasRightsTo('api/now.decision_tables/allow', {
              scopeId: sysId
          });
      },

      _getAccessibleScopeIds: function() {
          return gs.getSession().getApplicationPickerList().map(function(app) {
              return app.sysId;
          });
      },

      // Graphql acls do not support advanced/ script level configurations
      // We need advanced acl for our use cases and hence cannot rely on linking acl to graphql api 
      // This check has to be made to accommodate graphql execution security at resolver level as a work around 

      hasGraphQLAccess: function() {
          return isAdmin || isDecisionTableAdmin || isDecisionTableReader || isChangeManager || this.hasDelegatedAccess();
      },

      hasRESTAPIAccess: function() {
          return this.hasGraphQLAccess();
      },

      hasDelegatedAccessAlone: function() {
          return this.hasDelegatedAccess() && !(isAdmin || isDecisionTableAdmin);
      },
  };
})();

Sys ID

608b8d87c3db3010d4437f9ec840dd6d

Offical Documentation

Official Docs: