Доступ к объекту в портале самообслуживания

Всем привет,

Есть кусок кода, который корректно работает в системе:

var hash = NetworkUtilities.getEntityUrl("SomeObject", record.get("SomeObject.Id"));
this.sandbox.publish("PushHistoryState", {hash: hash});

Но в портале самообслуживания hash получается пустым и ничего не происходит. У пользователя есть доступ к объекту - он видит записи если открыть их напрямую (объект прописан в справочниках доступа объектов для портальных пользователей).

Кто-нибудь может подсказать в чем может быть проблема и как заставить работать код в портале?

Нравится

5 комментариев
Лучший ответ

Проверьте что у пользователей портала есть права на доступ к объекту (хотя бы на чтение), а так же что ваш объект добавлен в справочник  [Список объектов, доступных пользователям портала]  и что нужные колонки указаны а справочнике [Список доступных полей объектов на портале]

При необходимости внесите изменения, сбросьте рэдис и перезайдите в систему.

Код этой функции getEntityUrl можно открыть в конфигурации, в схеме NetworkUtilities:

/**
 * Creates a relative URL to open the card of the entity.
 * @throws {Terrasoft.ArgumentNullOrEmptyException} Throws an exception if not specified the schema name or
 * the entity ID.
 * @inheritdoc NetworkUtilities#getEntityConfigUrl
 */
getEntityUrl: function(config) {
	if (arguments.length > 1) {
config = {
	entitySchema: arguments[0],
	primaryColumnValue: arguments[1],
	typeColumnValue: arguments[2],
	operation: arguments[3]
};
	}
	let url = "";
	var entityConfig = this.getEntityConfigUrl(config);
	if (entityConfig) {
url = Terrasoft.combinePath(
	entityConfig.cardModule,
	entityConfig.cardSchema,
	entityConfig.operation,
	entityConfig.primaryColumnValue
);
	}
	return url;
},

А она вызывает getEntityConfigUrl:

/**
 * Creates a configuration object values for the U R L to a card entity.
 * @throws {Terrasoft.ArgumentNullOrEmptyException} Throws an exception if not specified
 * the schema name or the entity ID.
 * @param {Object} config Config object.
 * @param {String} config.entitySchema The name or ID of the schema entity.
 * @param {String} [config.entitySchemaName] The name of the schema entity. Alias for @entitySchema.
 * @param {String} config.primaryColumnValue The entity identifier.
 * @param {String} [config.typeColumnValue] The value of the column type.
 * @param {String} [config.typeId] The value of the column type. Alias for @typeColumnValue.
 * @param {String} [config.operation] Operation.
 * @return {Object} Returns the configuration object values for the U R L to a card entity.
 */
getEntityConfigUrl: function(config) {
	const configArg = arguments.length === 1;
	const entitySchema = configArg ? config.entitySchema || config.entitySchemaName : arguments[0];
	const primaryColumnValue = configArg ? config.primaryColumnValue : arguments[1];
	const typeColumnValue = configArg ? config.typeColumnValue || config.typeId : arguments[2];
	const operation = configArg ? config.operation : arguments[3];
	var entitySchemaName = Terrasoft.isGUID(entitySchema)
? this.getEntitySchemaName(entitySchema)
: entitySchema;
	if (!entitySchemaName) {
throw Ext.create("Terrasoft.ArgumentNullOrEmptyException");
	}
	var moduleStructure = Terrasoft.ModuleUtils.getModuleStructureByName(entitySchemaName);
	var entityStructure = Terrasoft.ModuleUtils.getEntityStructureByName(entitySchemaName);
	if (!entityStructure && !moduleStructure) {
return null;
	}
	var pages = entityStructure.pages;
	if (typeColumnValue && moduleStructure && moduleStructure.attribute && !Ext.isEmpty(pages)) {
var typePage = Terrasoft.where(pages, {"UId": typeColumnValue});
pages = Ext.isEmpty(typePage) ? pages : typePage;
	}
	var cardModule = moduleStructure && moduleStructure.cardModule ? moduleStructure.cardModule : "CardModuleV2";
	var cardSchema = pages[0].cardSchema;
	var configUrl = {
cardModule: cardModule,
cardSchema: cardSchema,
entitySchemaName: entitySchemaName,
operation: operation || Terrasoft.ConfigurationEnums.CardOperation.EDIT,
primaryColumnValue: primaryColumnValue
	};
	return configUrl;
},

Вероятно, в ней выполнение идёт по ветви, которая возвращает null. Попробуйте у себя отладить JS в браузере, чтобы выяснить, чего именно на портале не хватает и можно ли это обойти, модифицировав скрипт.

Проверьте что у пользователей портала есть права на доступ к объекту (хотя бы на чтение), а так же что ваш объект добавлен в справочник  [Список объектов, доступных пользователям портала]  и что нужные колонки указаны а справочнике [Список доступных полей объектов на портале]

При необходимости внесите изменения, сбросьте рэдис и перезайдите в систему.

Григорий Чех,

Спасибо за ответ.

Странно как раз то, что доступ к объекту есть и объект указан в справочниках. Косвенным подтверждением этого является то, что я могу открыть карточку объекта через адресную строку и могу видеть и даже менять данные на этой карточке под портальным пользователем.

Тёскин Дмитрий Валерьевич,

Тогда только отлаживатся и смотреть почему возращает пусто или сделать костыль (для портала зашить нужный url)

Ещё точнее, на портале в JS объект Terrasoft.configuration.ModuleStructure содержит только 3 стандартных портальных раздела, и для SomeObject функция ничего не возвращает. Посмотреть наполнение на портале и в обычной системе можно, введя в консоли браузера Terrasoft.configuration.ModuleStructure.

Логика наполнения списка реализована в C#-схеме ConfigurationSectionHelper.

Вероятно, если не прибегать к хакам, поможет добавление на портал этого раздела.

Показать все комментарии