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

Так как сокрытие этого поля со страницы, например, бизнес-правилами, не решает задачу до конца (у пользователя остается возможность вывести поле в реестр), решение видится в ограничении доступа по колонкам. Базовая функциональность подразумевает  возможность запрета чтения и записи на колонку, разрешения чтения на колонку,  разрешения чтения и записи на колонку. 

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

2 комментария

Добрый день,

 

Мы со своей стороны зарегистрировали проблему и запланируем доработку в будущих релизах.

 

 

С уважением,

Кучер Виталина

Сотрудник технической поддержки Террасофт

v.kucher@creatio.com,

А в идеале сделать элементом бизнес-процесса, чтобы можно было динамически менять права доступа на колонку в зависимости от внешних событий и/или этапа процесса

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

Добрый день!

Возникла потребность на карточке объекта, для которого в разделе права доступа к объекту настроено администрирование по колонкам, в зависимости от пользователя, включать или выключать данное администрирование, проверку прав.

Нашел модуль SecurutyUtilities, метод checkColumnsEditRight, который как мне кажется выполняет данную проверку, одна при открытии карточки отладчик не попадает в этот метод.

Подскажите, в какую сторону копать, какой метод или сервис можно переопределить для решения данной задачи.

Нравится

1 комментарий

Этот метод используется только в схеме OrderPageV2 пакета Order:

/**
* Validates payment status and change if valid.
* @protected
* @param {Function} callback The callback function.
* @param {Object} scope Environment object callback function.
*/
validatePaymentStatus: function(callback, scope) {
	if (this.validate()) {
		var parameters = {
			columnNames: ["PaymentStatus"],
			callback: this.handleColumnRightsAvailability.bind(this, callback, scope)
		};
		this.checkColumnsEditRight.call(this, parameters);
	} else {
		callback.call(scope || this);
	}
},
 
/**
* Handles column rights availability.
* @private
* @param {Function} callback The callback function.
* @param {Object} scope Environment object callback function.
* @param {Object} columnRights Rights of column.
*/
handleColumnRightsAvailability: function(callback, scope, columnRights) {
	if (columnRights.PaymentStatus) {
		this.changePaymentStatus(callback, scope || this);
	} else {
		callback.call(scope || this);
	}
},

Но права доступа определяются на стороне сервера и не уверен, что на стороне браузера получится их регулировать.

Вообще, непонятно, чем отличаются обычные права по колонкам от того, что Вы хотите. Если у пользователя есть права, он видит или может менять значение поля, нет — не может. 

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

Добрый день, коллеги.
Такой вопрос: есть ли возможность не показывать пользователю в зависимости от его прав доступа колонку "Дата создания" (CreatedOn) в DataGrid-е? В Инструменты -> Администрирование -> Права доступа к полям колонок ID, CreatedOn, CreatedByID, ModifiedOn и ModifiedByID нет. Похоже, если запретить пользователю доступ к ним то он вообще не сможет сохранять и изменять записи в таблице.
У меня только одна мысль - сделать два DataGridView, один с колонкой, другой без и переключать их при открытии реестра. Тогда другой вопрос: можно ли скрыть панельку, на которой перечисляются все DataGridView, чтобы пользователь сам не мог поменять представление.
Версия Terrasoft: TerrasoftCRM 3.3.2

Нравится

2 комментария

Здравствуйте,

поля ID, CreatedOn, CreatedByID заполняются автоматически в момент создания записи, а поля ModifiedOn, ModifiedByID заполняются в момент изменения записи.

Доступ к этим полям должен быть всегда у всех пользователей.

Самое простое решение, это сделать представление отдельное для пользователей у которых не будут добавлены эти поля. На событии OnPrepare выполнить необходимую проверку и в результате от проверки отобразить или скрыть необходимое представление.

Пример:

function wnd_AccountsGridAreaOnPrepare(Window) {
	wnd_BaseGridAreaOnPrepare(Window);
	Initialize(Window);
 
	var IsVisibleGV = false;
	if (Ваше условие) {
		IsVisibleGV = true;
	}
	gvMyAccounts.IsVisibel = IsVisibleGV;
	gvAll.IsVisibel = !IsVisibleGV;
}

Спасибо, Павел.
Что-то я проглядел, что у представлений есть свойство видимости.

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

...и что делать, если вы её уже удалили.

В bpm'online 5.X есть возможность администрировать объекты по колонкам, то есть разрешать или запрещать разным пользователям системы видеть информацию в определённом поле карточки и столбце реестра.
доступ к колонкам

При этом есть неочевидная особенность: если раздать по колонке права, а потом колонку удалить, то при попытке зайти в раздел «Администрирование: Пользователи» произойдёт свал. Примерно такой:

Exception Message: Элемент коллекции с идентификатором "{06CFA7D8-FED3-4D86-A396-B8094793C2AA}" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Exception Stack Trace:
   at Terrasoft.Core.MetaItemCollection`1.GetByUId(Guid uid)
   at Terrasoft.WebApp.SysAdminUnitColumnPermissionsGridPageEventsProcess`1.FillData(DataSourceRequest dataSourceRequest)
   at Terrasoft.WebApp.BaseVirtualGridPageEventsProcess`1.ScriptGridPageRefreshRowExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.Execute(ProcessExecutingContext context, Func`2 internalExecute)
   at Terrasoft.WebApp.BaseVirtualGridPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.WebApp.SysAdminUnitColumnPermissionsGridPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)

 

Дело в том, что информация о правах хранится в таблице SysEntitySchemaColumnRight и при удалении колонки записи о ней автоматически не удаляются. И при заходе в раздел администрирования система рушится при обращении к уже несуществующему полю, пытаясь отобразить дерево прав пользователя.

Чтобы вернуть работоспособность системе, достаточно удалить все записи о колонке. Смотрим Id из сообщения об ошибке и пишем с ним SQL-запрос:

 

DELETE FROM SysEntitySchemaColumnRight WHERE SubjectColumnUId = '06CFA7D8-FED3-4D86-A396-B8094793C2AA'

 

После его запуска система должна заработать нормально.

PS: если строку удалили, а свал всё равно происходит, то, вероятно, удалено несколько полей. Скопируйте Id (а он будет уже другой), запустите delete-скрипт и так до тех пор, пока не заработает.

Нравится

Поделиться

2 комментария

Надо же, кто-то еще использует 5.Х... я думала, всех давно перевели на 7-ку. Или что там у вас актуально, 9-ка? :)

Актуальная версия 7.7. Но кто-то сейчас и Х25 использует.

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