<?xml version="1.0" encoding="UTF-8"?><unload unload_date="2022-01-27 20:23:57">
<sys_remote_update_set action="INSERT_OR_UPDATE">
<application display_value="Global">global</application>
<application_name>Global</application_name>
<application_scope>global</application_scope>
<application_version/>
<collisions/>
<commit_date/>
<deleted/>
<description> </description>
<inserted/>
<name>moveworks.acl.1.0.1</name>
<origin_sys_id/>
<parent display_value=""/>
<release_date/>
<remote_base_update_set display_value=""/>
<remote_parent_id/>
<remote_sys_id>7f6552f1475d051078d38a5f746d4300</remote_sys_id>
<state>loaded</state>
<summary/>
<sys_class_name>sys_remote_update_set</sys_class_name>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:56</sys_created_on>
<sys_id>3d7552f1475d051078d38a5f746d43ea</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:56</sys_updated_on>
<update_set display_value=""/>
<update_source display_value=""/>
<updated/>
</sys_remote_update_set>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_app_8e9e72261b8918105394fc88cc4bcb46</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_app"><sys_app action="INSERT_OR_UPDATE"><active>true</active><can_edit_in_studio>true</can_edit_in_studio><enforce_license>none</enforce_license><guided_setup_guid/><hide_on_ui>false</hide_on_ui><installed_as_dependency>false</installed_as_dependency><js_level>helsinki_es5</js_level><licensable>true</licensable><license/><license_category>none</license_category><license_definition/><license_model>none</license_model><logo/><menu/><name>moveworks.acl.1.0.1</name><private>false</private><restrict_table_access>false</restrict_table_access><runtime_access_tracking/><scope>global</scope><scoped_administration>false</scoped_administration><short_description/><source>8e9e72261b8918105394fc88cc4bcb46</source><store_correlation_id/><store_url/><sys_class_name>sys_app</sys_class_name><sys_code/><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:14</sys_created_on><sys_id>8e9e72261b8918105394fc88cc4bcb46</sys_id><sys_mod_count>1</sys_mod_count><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 19:12:52</sys_updated_on><template/><trackable>true</trackable><uninstall_blocked>false</uninstall_blocked><user_role/><vendor/><vendor_prefix/><version>1.0.1</version></sys_app></record_update>]]></payload>
<payload_hash>-1907367776</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:56</sys_created_on>
<sys_id>317552f1475d051078d38a5f746d43eb</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d35646e0000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:56</sys_updated_on>
<table/>
<target_name>moveworks.acl.1.0.1</target_name>
<type>Custom Application</type>
<update_domain>global</update_domain>
<update_guid>283546b18a1d051046512e7bcdf736af</update_guid>
<update_guid_history>283546b18a1d051046512e7bcdf736af:-1907367776,14d56ff6c80dc1107d84cfa3e4db585d:12858213</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_query_parameter_219a53081b9d1c105394fc88cc4bcb59</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_ws_query_parameter"><sys_ws_query_parameter action="INSERT_OR_UPDATE"><example_value>2edf4fe61b3814105394fc88cc4bcb0d</example_value><name>user</name><required>true</required><short_description>User sys_id for whom to fetch access info.</short_description><sys_class_name>sys_ws_query_parameter</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:23</sys_created_on><sys_id>219a53081b9d1c105394fc88cc4bcb59</sys_id><sys_mod_count>1</sys_mod_count><sys_name>user</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_ws_query_parameter_219a53081b9d1c105394fc88cc4bcb59</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:15</sys_updated_on><web_service_definition display_value="moveworks">aaf4178a1b85d4105394fc88cc4bcbc8</web_service_definition></sys_ws_query_parameter></record_update>]]></payload>
<payload_hash>788004608</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>357552f1475d051078d38a5f746d43ec</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d35649e0000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>user</target_name>
<type>Scripted REST Query Parameter</type>
<update_domain>global</update_domain>
<update_guid>a3451eb1995d05107a43fb274c9a16bf</update_guid>
<update_guid_history>a3451eb1995d05107a43fb274c9a16bf:788004608,d6d5eff64b0dc110e8913144f55cbfab:2112767180</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_properties_469eb2261b8918105394fc88cc4bcbf1</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_properties"><sys_properties action="INSERT_OR_UPDATE"><choices/><description>Version Number for the moveworks.acl module</description><ignore_cache>false</ignore_cache><is_private>false</is_private><name>moveworks.acl.version</name><read_roles/><suffix/><sys_class_name>sys_properties</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:16</sys_created_on><sys_id>469eb2261b8918105394fc88cc4bcbf1</sys_id><sys_mod_count>2</sys_mod_count><sys_name>moveworks.acl.version</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_properties_469eb2261b8918105394fc88cc4bcbf1</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:10</sys_updated_on><type>string</type><value>1.0.1</value><write_roles/></sys_properties><sys_translated_text action="delete_multiple" query="documentkey=469eb2261b8918105394fc88cc4bcbf1"/></record_update>]]></payload>
<payload_hash>-409573076</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>397552f1475d051078d38a5f746d43eb</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3564800000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>moveworks.acl.version</target_name>
<type>System Property</type>
<update_domain>global</update_domain>
<update_guid>3e451eb10e5d0510b318a58fe6116413</update_guid>
<update_guid_history>3e451eb10e5d0510b318a58fe6116413:-409573076,053586b1591d0510528719d86f9fa7bd:-617866256,ddd5eff6020dc110ae6894bb3e6b1907:-638203631</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_query_parameter_map_d99a53081b9d1c105394fc88cc4bcb55</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_ws_query_parameter_map"><sys_ws_query_parameter_map action="INSERT_OR_UPDATE"><sys_class_name>sys_ws_query_parameter_map</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:27</sys_created_on><sys_id>d99a53081b9d1c105394fc88cc4bcb55</sys_id><sys_mod_count>1</sys_mod_count><sys_name>219a53081b9d1c105394fc88cc4bcb59</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_ws_query_parameter_map_d99a53081b9d1c105394fc88cc4bcb55</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:17</sys_updated_on><web_service_operation display_value="get_access_info">2a9910242f1bd410d631db9df699b652</web_service_operation><web_service_query_parameter display_value="user">219a53081b9d1c105394fc88cc4bcb59</web_service_query_parameter></sys_ws_query_parameter_map></record_update>]]></payload>
<payload_hash>1412608758</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>397592f1475d051078d38a5f746d4312</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3564c60000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>219a53081b9d1c105394fc88cc4bcb59</target_name>
<type>Scripted REST Query Parameter Associatio</type>
<update_domain>global</update_domain>
<update_guid>80555eb17c5d0510e60b44f17e6e926e</update_guid>
<update_guid_history>80555eb17c5d0510e60b44f17e6e926e:1412608758,1bd5eff6940dc1100596ce5e2b1630e2:1316071314</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_operation_6c9c2b322f921010d631db9df699b63c</name>
<payload>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;record_update table="sys_ws_operation"&gt;&lt;sys_ws_operation action="INSERT_OR_UPDATE"&gt;&lt;active&gt;true&lt;/active&gt;&lt;consumes&gt;application/json,application/xml,text/xml&lt;/consumes&gt;&lt;consumes_customized&gt;false&lt;/consumes_customized&gt;&lt;default_operation_uri/&gt;&lt;enforce_acl/&gt;&lt;http_method&gt;PUT&lt;/http_method&gt;&lt;name&gt;config&lt;/name&gt;&lt;operation_script&gt;&lt;![CDATA[// eslint-disable-next-line no-unused-vars
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
    var result = {};
    var legacy_status = request.body.data["entitlements_enabled"];
    if (legacy_status == "true" || legacy_status == "false") {
        gs.setProperty("moveworks.acl.check_legacy_entitlements", legacy_status)
    }

    result["entitlements_enabled"] = gs.getProperty("moveworks.acl.check_legacy_entitlements");
    return result;
})(request, response);

]]&gt;&lt;/operation_script&gt;&lt;operation_uri&gt;/api/488834/moveworks/acl/config&lt;/operation_uri&gt;&lt;produces&gt;application/json,application/xml,text/xml&lt;/produces&gt;&lt;produces_customized&gt;false&lt;/produces_customized&gt;&lt;relative_path&gt;/acl/config&lt;/relative_path&gt;&lt;request_example&gt;{
    "entitlements_enabled": "false"
}
&lt;/request_example&gt;&lt;requires_acl_authorization&gt;true&lt;/requires_acl_authorization&gt;&lt;requires_authentication&gt;true&lt;/requires_authentication&gt;&lt;requires_snc_internal_role&gt;true&lt;/requires_snc_internal_role&gt;&lt;short_description&gt;Configures the ACL module to check for user entitlements.&lt;/short_description&gt;&lt;sys_class_name&gt;sys_ws_operation&lt;/sys_class_name&gt;&lt;sys_created_by&gt;admin&lt;/sys_created_by&gt;&lt;sys_created_on&gt;2022-01-18 18:33:31&lt;/sys_created_on&gt;&lt;sys_id&gt;6c9c2b322f921010d631db9df699b63c&lt;/sys_id&gt;&lt;sys_mod_count&gt;2&lt;/sys_mod_count&gt;&lt;sys_name&gt;config&lt;/sys_name&gt;&lt;sys_package display_value="Global" source="global"&gt;global&lt;/sys_package&gt;&lt;sys_policy/&gt;&lt;sys_scope display_value="moveworks.acl.1.0.1"&gt;8e9e72261b8918105394fc88cc4bcb46&lt;/sys_scope&gt;&lt;sys_update_name&gt;sys_ws_operation_6c9c2b322f921010d631db9df699b63c&lt;/sys_update_name&gt;&lt;sys_updated_by&gt;admin&lt;/sys_updated_by&gt;&lt;sys_updated_on&gt;2022-01-27 20:23:20&lt;/sys_updated_on&gt;&lt;web_service_definition display_value="moveworks"&gt;aaf4178a1b85d4105394fc88cc4bcbc8&lt;/web_service_definition&gt;&lt;web_service_version/&gt;&lt;/sys_ws_operation&gt;&lt;/record_update&gt;</payload>
<payload_hash>1112930955</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>717552f1475d051078d38a5f746d43ec</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3564ec0000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>config</target_name>
<type>Scripted REST Resource</type>
<update_domain>global</update_domain>
<update_guid>70551eb1c55d0510cc2a5999415433b8</update_guid>
<update_guid_history>70551eb1c55d0510cc2a5999415433b8:1112930955,ace5233a6c0dc1105307e829715b4b82:-1197963733</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_query_parameter_map_d8a856881bd91c105394fc88cc4bcbae</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_ws_query_parameter_map"><sys_ws_query_parameter_map action="INSERT_OR_UPDATE"><sys_class_name>sys_ws_query_parameter_map</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:25</sys_created_on><sys_id>d8a856881bd91c105394fc88cc4bcbae</sys_id><sys_mod_count>1</sys_mod_count><sys_name>5dd89a881bd91c105394fc88cc4bcbc0</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_ws_query_parameter_map_d8a856881bd91c105394fc88cc4bcbae</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:16</sys_updated_on><web_service_operation display_value="get_access_info">2a9910242f1bd410d631db9df699b652</web_service_operation><web_service_query_parameter display_value="table">5dd89a881bd91c105394fc88cc4bcbc0</web_service_query_parameter></sys_ws_query_parameter_map></record_update>]]></payload>
<payload_hash>177065981</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>757592f1475d051078d38a5f746d4312</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3564b60000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>5dd89a881bd91c105394fc88cc4bcbc0</target_name>
<type>Scripted REST Query Parameter Associatio</type>
<update_domain>global</update_domain>
<update_guid>bf455eb1965d0510b6108628b2738f69</update_guid>
<update_guid_history>bf455eb1965d0510b6108628b2738f69:177065981,cbd5eff6cf0dc110f9d77e44a68f35b2:1857455521</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_query_parameter_map_599ad3081b9d1c105394fc88cc4bcb02</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_ws_query_parameter_map"><sys_ws_query_parameter_map action="INSERT_OR_UPDATE"><sys_class_name>sys_ws_query_parameter_map</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:24</sys_created_on><sys_id>599ad3081b9d1c105394fc88cc4bcb02</sys_id><sys_mod_count>1</sys_mod_count><sys_name>ad9ad3081b9d1c105394fc88cc4bcb05</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_ws_query_parameter_map_599ad3081b9d1c105394fc88cc4bcb02</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:15</sys_updated_on><web_service_operation display_value="get_access_info">2a9910242f1bd410d631db9df699b652</web_service_operation><web_service_query_parameter display_value="record">ad9ad3081b9d1c105394fc88cc4bcb05</web_service_query_parameter></sys_ws_query_parameter_map></record_update>]]></payload>
<payload_hash>589243652</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>b17592f1475d051078d38a5f746d4312</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3564ad0000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>ad9ad3081b9d1c105394fc88cc4bcb05</target_name>
<type>Scripted REST Query Parameter Associatio</type>
<update_domain>global</update_domain>
<update_guid>bf451eb1115d05105137bfb6c9ce0fc3</update_guid>
<update_guid_history>bf451eb1115d05105137bfb6c9ce0fc3:589243652,b6d5eff6740dc1109d423aa8879623db:1501441568</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_operation_2a9910242f1bd410d631db9df699b652</name>
<payload>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;record_update table="sys_ws_operation"&gt;&lt;sys_ws_operation action="INSERT_OR_UPDATE"&gt;&lt;active&gt;true&lt;/active&gt;&lt;consumes&gt;application/json,application/xml,text/xml&lt;/consumes&gt;&lt;consumes_customized&gt;false&lt;/consumes_customized&gt;&lt;default_operation_uri/&gt;&lt;enforce_acl/&gt;&lt;http_method&gt;GET&lt;/http_method&gt;&lt;name&gt;get_access_info&lt;/name&gt;&lt;operation_script&gt;&lt;![CDATA[/*eslint-env es6*/

/* MARK: CONSTANTS */
// MTOM Table Configuration
const MTOM_TABLE_MAP = {
    sc_cat_item: {
        mtomQueryKey: 'sc_cat_item', // attribute in the MTOM table that links back to the resource
        tables: {
            available_for: "sc_cat_item_user_criteria_mtom",
            not_available_for: "sc_cat_item_user_criteria_no_mtom",
        }
    },
    kb_knowledge: {
        mtomQueryKey: 'kb_knowledge_base', // attribute in the MTOM table that links back to the resource
        tables: {
            available_for: "kb_uc_can_read_mtom",
            not_available_for: "kb_uc_cannot_read_mtom",
        }
    },
};

// Complete list of user attributes that an entitlement can be configured against.
const ENTITLEMENT_ATTRIBUTES = [
    "user", "company", "dept", "location", "group"
];

/* MARK: UTILS */
/**
 * GlideScript equivalent of Object.assign in JavaScript.
 * @param {*} target JSON object to copy values to.
 * @param {*} source JSON object to copy values from.
 */
function objectAssign(target, source) {
    for (var key in source) {
        target[key] = source[key]
    }
}

/* MARK: EXTERNAL TABLES - USER CRITERIA */
/**
 * Fetches all UserCriteria on a recordID of type resourceType
 * @param {*} recordID sys_id of the record to fetch UserCriteria for.
 * @param {*} resourceType type of resource: kb_knowledge, sc_cat_item
 */
function getMTOMCriteria(recordID, resourceType) {
    // Note: Object Destructuring not Supported in GlideScript
    var mtomConfig = MTOM_TABLE_MAP[resourceType]
    var mtomQueryKey = mtomConfig.mtomQueryKey;
    var tables = mtomConfig.tables;


    var mtomResult = {}

    for (var criteriaType in tables) {
        // Get all UserCriteria Records where mtomEntry.mtomQueryKey == recordID
        var mtomEntry = new GlideRecord(tables[criteriaType]);
        mtomEntry.addQuery(mtomQueryKey, recordID);
        mtomEntry.query();

        // Convert the GlideRecord query into an Array of sys_ids
        var userCriteriaRecords = []
        while (mtomEntry.next()) {
            userCriteriaRecords.push(mtomEntry.user_criteria.sys_id.toString());
        }
        mtomResult[criteriaType] = userCriteriaRecords
    }

    return mtomResult;
}

/* MARK: EXTERNAL TABLES - LEGACY USER ENTITLEMENTS */
/**
 * Returns a list of other SNOW Objects that match User Entitlements for a given Record
 * @param {*} attr Type of record: user, dept, company, etc.
 * @param {*} type Type of MTOM: no_mtom, mtom
 * @param {*} recordID RecordID to search matches for.
 */
function getUserEntitlementMatches(attr, type, recordID) {
    var table = ['sc_cat_item', attr, type].join('_')

    var entitlementsQuery = new GlideRecord(table);
    entitlementsQuery.addQuery("sc_cat_item", recordID);
    entitlementsQuery.query();
    var entitlements = []
    while (entitlementsQuery.next()) {
        entitlements.push(entitlementsQuery.getValue('sc_avail_' + attr))
    }
    return entitlements

}
/**
 * Returns a dictionary of all types of User Entitlements that a given record has.
 * @param {*} recordID recordID to fetch Entitlements for
 */
function getAllUserEntitlements(recordID) {
    var entitlementsForRecord = {}
    for (var i in ENTITLEMENT_ATTRIBUTES) {
        var attr = ENTITLEMENT_ATTRIBUTES[i]
        entitlementsForRecord[attr] = {}
        entitlementsForRecord[attr].available_for = getUserEntitlementMatches(attr, 'mtom', recordID)
        entitlementsForRecord[attr].not_available_for = getUserEntitlementMatches(attr, 'no_mtom', recordID)

    }
    return entitlementsForRecord;
}

function getUserInfo(userID, ENTITLEMENTS_ENABLED) {
    var glideUser = gs.getUser().getUserByID(userID);

    var userInfo = {
        roles: glideUser.getRoles().toArray(),
        user_criteria: SNC.UserCriteriaLoader.getAllUserCriteria(userID)
    };
    if (ENTITLEMENTS_ENABLED) {
        // Augment User Information with their Entitlement Attributes
        var userRecord = glideUser.getRecord();
        userInfo.entitlements = {
            user: userID,
            company: userRecord.getValue('company'),
            department: userRecord.getValue('department'),
            location: userRecord.getValue('location'),
            group: glideUser.getMyGroups().toArray()
        }
    }
    return userInfo;
}

/* MARK: REST ENDPOINT */
// eslint-disable-next-line no-unused-vars
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
    // Deconstruct the Query
    var queryParams = request.queryParams;
    var userIDs = queryParams.user;
    var recordIDs = queryParams.record;
    var table = queryParams.table;

    const ENTITLEMENTS_ENABLED = gs.getProperty("moveworks.acl.check_legacy_entitlements") == "true";
    const IS_KNOWLEDGE_QUERY = (table == 'kb_knowledge');
    var result = {};

    // Get Information about the Users
    result['user'] = [];
    for (var userIdx in userIDs) {
        var userID = userIDs[userIdx];
        result.user.push(getUserInfo(userID, ENTITLEMENTS_ENABLED));
    }


    // Setup Records Response
    result[table] = [];
    if (IS_KNOWLEDGE_QUERY) result.kb_knowledge_base = {};

    for (var recordIdx in recordIDs) {
        var recordID = recordIDs[recordIdx];
        var recordInfo = {}

        // Get Information from the Resource Record
        var resource = new GlideRecord(table);
        resource.get(recordID);

        var roles = resource.roles.toLowerCase(); // glideUser.getRoles() makes all roles lowercase even if the source differs.
        recordInfo.roles = roles == '' ? [] : roles.split(",");
        if (IS_KNOWLEDGE_QUERY) {
            recordInfo.kb_knowledge_base = resource.kb_knowledge_base;
            recordInfo.available_for = resource.can_read_user_criteria.split(',') || [];
            recordInfo.not_available_for = resource.cannot_read_user_criteria.split(',') || [];
        }
        if (ENTITLEMENTS_ENABLED &amp;&amp; !IS_KNOWLEDGE_QUERY) recordInfo.entitlements = getAllUserEntitlements(recordID);

        // Get Information from related MTOMs
        // If it's a knowledge query, use the `kb_knowledge_base` attribute on the resource. Otherwise, use the recordID.
        var mtomUserCriteria = getMTOMCriteria(IS_KNOWLEDGE_QUERY ? resource.kb_knowledge_base : recordID, table);
        if (IS_KNOWLEDGE_QUERY) {
            result.kb_knowledge_base[resource.kb_knowledge_base] = mtomUserCriteria;
        } else {
            objectAssign(recordInfo, mtomUserCriteria);
        }

        result[table].push(recordInfo)
    }

    return result;
})(request, response);
]]&gt;&lt;/operation_script&gt;&lt;operation_uri&gt;/api/488834/moveworks/acl/get_access_info&lt;/operation_uri&gt;&lt;produces&gt;application/json,application/xml,text/xml&lt;/produces&gt;&lt;produces_customized&gt;false&lt;/produces_customized&gt;&lt;relative_path&gt;/acl/get_access_info&lt;/relative_path&gt;&lt;request_example/&gt;&lt;requires_acl_authorization&gt;true&lt;/requires_acl_authorization&gt;&lt;requires_authentication&gt;true&lt;/requires_authentication&gt;&lt;requires_snc_internal_role&gt;true&lt;/requires_snc_internal_role&gt;&lt;short_description&gt;Returns the basic information required to evaluate if a user should have access &lt;/short_description&gt;&lt;sys_class_name&gt;sys_ws_operation&lt;/sys_class_name&gt;&lt;sys_created_by&gt;admin&lt;/sys_created_by&gt;&lt;sys_created_on&gt;2022-01-18 18:33:33&lt;/sys_created_on&gt;&lt;sys_id&gt;2a9910242f1bd410d631db9df699b652&lt;/sys_id&gt;&lt;sys_mod_count&gt;2&lt;/sys_mod_count&gt;&lt;sys_name&gt;get_access_info&lt;/sys_name&gt;&lt;sys_package display_value="Global" source="global"&gt;global&lt;/sys_package&gt;&lt;sys_policy/&gt;&lt;sys_scope display_value="moveworks.acl.1.0.1"&gt;8e9e72261b8918105394fc88cc4bcb46&lt;/sys_scope&gt;&lt;sys_update_name&gt;sys_ws_operation_2a9910242f1bd410d631db9df699b652&lt;/sys_update_name&gt;&lt;sys_updated_by&gt;admin&lt;/sys_updated_by&gt;&lt;sys_updated_on&gt;2022-01-27 20:23:21&lt;/sys_updated_on&gt;&lt;web_service_definition display_value="moveworks"&gt;aaf4178a1b85d4105394fc88cc4bcbc8&lt;/web_service_definition&gt;&lt;web_service_version/&gt;&lt;/sys_ws_operation&gt;&lt;/record_update&gt;</payload>
<payload_hash>1437103519</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>bd7552f1475d051078d38a5f746d43eb</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3565010000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>get_access_info</target_name>
<type>Scripted REST Resource</type>
<update_domain>global</update_domain>
<update_guid>01559eb1dd5d05105d907fd03e3fe13e</update_guid>
<update_guid_history>01559eb1dd5d05105d907fd03e3fe13e:1437103519,8de5633aca0dc1101d0f7363bb45f24d:1480739223</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_query_parameter_5dd89a881bd91c105394fc88cc4bcbc0</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_ws_query_parameter"><sys_ws_query_parameter action="INSERT_OR_UPDATE"><example_value>sc_cat_item</example_value><name>table</name><required>true</required><short_description>Table that contains the records. One of sc_cat_item, kb_knowledge.</short_description><sys_class_name>sys_ws_query_parameter</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:22</sys_created_on><sys_id>5dd89a881bd91c105394fc88cc4bcbc0</sys_id><sys_mod_count>1</sys_mod_count><sys_name>table</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_ws_query_parameter_5dd89a881bd91c105394fc88cc4bcbc0</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:14</sys_updated_on><web_service_definition display_value="moveworks">aaf4178a1b85d4105394fc88cc4bcbc8</web_service_definition></sys_ws_query_parameter></record_update>]]></payload>
<payload_hash>1193701478</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>f57552f1475d051078d38a5f746d43ec</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3564960000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>table</target_name>
<type>Scripted REST Query Parameter</type>
<update_domain>global</update_domain>
<update_guid>534596b1f95d05102d0cf4bee80a34a7</update_guid>
<update_guid_history>534596b1f95d05102d0cf4bee80a34a7:1193701478,02d5eff6500dc11063ef974e935b45a8:1172300326</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_properties_febfe6f2f87811cb243d10438dce48e3</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_properties"><sys_properties action="INSERT_OR_UPDATE"><choices/><description>Platform Permissions Optimization to reduce number of queries for customers that don't support legacy user entitlements.</description><ignore_cache>false</ignore_cache><is_private>false</is_private><name>moveworks.acl.check_legacy_entitlements</name><read_roles/><suffix/><sys_class_name>sys_properties</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-27 19:12:59</sys_created_on><sys_id>febfe6f2f87811cb243d10438dce48e3</sys_id><sys_mod_count>1</sys_mod_count><sys_name>moveworks.acl.check_legacy_entitlements</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_properties_febfe6f2f87811cb243d10438dce48e3</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:17</sys_updated_on><type>boolean</type><value>false</value><write_roles/></sys_properties><sys_translated_text action="delete_multiple" query="documentkey=febfe6f2f87811cb243d10438dce48e3"/></record_update>]]></payload>
<payload_hash>1792414121</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>f97552f1475d051078d38a5f746d43eb</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d3564e10000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>moveworks.acl.check_legacy_entitlements</target_name>
<type>System Property</type>
<update_domain>global</update_domain>
<update_guid>60555eb13c5d0510780ddb3932d8c0c1</update_guid>
<update_guid_history>60555eb13c5d0510780ddb3932d8c0c1:1792414121,a235c6b1c01d0510cd174b10a52b116b:2117232955</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
<sys_update_xml action="INSERT_OR_UPDATE">
<action>INSERT_OR_UPDATE</action>
<application display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</application>
<category>customer</category>
<comments/>
<name>sys_ws_query_parameter_ad9ad3081b9d1c105394fc88cc4bcb05</name>
<payload><![CDATA[<?xml version="1.0" encoding="UTF-8"?><record_update table="sys_ws_query_parameter"><sys_ws_query_parameter action="INSERT_OR_UPDATE"><example_value>03df4fe61b3814105394fc88cc4bcba0, 03df4fe61b3814105394fc88cc4bcba1, 03df4fe61b3814105394fc88cc4bcba2</example_value><name>record</name><required>true</required><short_description>Comma-separated records for which to fetch access info.</short_description><sys_class_name>sys_ws_query_parameter</sys_class_name><sys_created_by>admin</sys_created_by><sys_created_on>2022-01-18 18:33:20</sys_created_on><sys_id>ad9ad3081b9d1c105394fc88cc4bcb05</sys_id><sys_mod_count>1</sys_mod_count><sys_name>record</sys_name><sys_package display_value="Global" source="global">global</sys_package><sys_policy/><sys_scope display_value="moveworks.acl.1.0.1">8e9e72261b8918105394fc88cc4bcb46</sys_scope><sys_update_name>sys_ws_query_parameter_ad9ad3081b9d1c105394fc88cc4bcb05</sys_update_name><sys_updated_by>admin</sys_updated_by><sys_updated_on>2022-01-27 20:23:13</sys_updated_on><web_service_definition display_value="moveworks">aaf4178a1b85d4105394fc88cc4bcbc8</web_service_definition></sys_ws_query_parameter></record_update>]]></payload>
<payload_hash>1906493053</payload_hash>
<remote_update_set display_value="moveworks.acl.1.0.1">3d7552f1475d051078d38a5f746d43ea</remote_update_set>
<replace_on_upgrade>false</replace_on_upgrade>
<sys_created_by>admin</sys_created_by>
<sys_created_on>2022-01-27 20:23:57</sys_created_on>
<sys_id>fd7592f1475d051078d38a5f746d4311</sys_id>
<sys_mod_count>0</sys_mod_count>
<sys_recorded_at>17e9d35648b0000001</sys_recorded_at>
<sys_updated_by>admin</sys_updated_by>
<sys_updated_on>2022-01-27 20:23:57</sys_updated_on>
<table/>
<target_name>record</target_name>
<type>Scripted REST Query Parameter</type>
<update_domain>global</update_domain>
<update_guid>8345d6b1865d051032a08db7ad820d09</update_guid>
<update_guid_history>8345d6b1865d051032a08db7ad820d09:1906493053,35d5eff6490dc1103b4a72e7906f760f:566856687</update_guid_history>
<update_set display_value=""/>
<view/>
</sys_update_xml>
</unload>
