Вопрос

Как убрать действие "Копировать/Изменить/Удалить" в детали

Как убрать действие "Удалить" в детали.

Речь идет о кнопках "Копировать/изменить/удалить" во всплывающем окне детали.



И второе, как удалить их у конкретных орг. ролей., т.е. что бы у указанных орг. ролей не было этих кнопок, у остальных были.

Необходимо забрать доступ к действию "удалить" в  конкретной детали

Прикрепленные файлы

Нравится

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

1)

getDeleteRecordMenuItem: Terrasoft.emptyFn //добавлять на схемы деталей (пример OrderProductDetailV2) в блок methods

2) Можно создать кастомную операцию (права доступа на операции) и проверять есть ли у пользователя доступ к этой операции. Пример проверки доступа к операции:

            setUserOperationRightsForCreateChange: function() {
                var operationsToRequest = [];
                debugger;
                operationsToRequest.push("CanCreateChange");
                RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
                    if (result) {
                        this.set("CanCreateChange", result.CanCreateChange);
                    }
                }, this);
            },

А не проще ли права доступа на удаление в конкретном объекте настроить?

1)

getDeleteRecordMenuItem: Terrasoft.emptyFn //добавлять на схемы деталей (пример OrderProductDetailV2) в блок methods

2) Можно создать кастомную операцию (права доступа на операции) и проверять есть ли у пользователя доступ к этой операции. Пример проверки доступа к операции:

            setUserOperationRightsForCreateChange: function() {
                var operationsToRequest = [];
                debugger;
                operationsToRequest.push("CanCreateChange");
                RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
                    if (result) {
                        this.set("CanCreateChange", result.CanCreateChange);
                    }
                }, this);
            },

А не проще ли права доступа на удаление в конкретном объекте настроить?

Дмитрий А., 

Правильно Вас понял, что при добавлении этого (getDeleteRecordMenuItem: Terrasoft.emptyFn ) в блок methods схемы детали, мы уберем у детали действие удалить?!



А когда вызывать этот метод(getDeleteRecordMenuItem), при каких обстоятельствах?! 

Соломонов Алексей Михайлович,

Посмотрите что делает этот метод в коробке. Он как раз отвечает за добавление пункта меню.

Вызывается в addRecordOperationsMenuItems схемы BaseGridDetailV2

Мы же замещаем эту функцию и ничего в ней не делаем. Соответственно пункт меню не добавится.

В вашем случае можно проверить есть ли доступ на операцию. Если есть, то вызываем

 

this.callParent(arguments);

 

Дмитрий А.,

Схема деталей куда добавляем (getDeleteRecordMenuItem: Terrasoft.emptyFn) должна как-то ссылаться на BaseGridDetailV2  ?

 

 

Добавить комментарий

Соломонов Алексей Михайлович,

Обычно все детали и так унаследованы от нее. Что-то дополнительно делать не нужно. Если вы будете выполнять проверку доступа к операции, то в зависимости нужно добавить зависимость от 

RightUtilities

Пример:

define("ContactSectionV2", ["RightUtilities"], function(RightUtilities) {
 
...
 
}

 

Стандартными методами вы можете запретить удаление из объекта детали для определенных ролей.

Пункт Delete у всех останется, но пользователю будет выдавать сообщение, что для удаления не хватает прав.



Хотя, признаю, пользователям было бы удобнее сразу видеть, что они что-то не смогут сделать (добавить, исправить, удалить...)

Дмитрий А.,

 

Дело как раз в том, что эта деталь и наследуется либо от:

 - Редактируемая деталь документа ( MOBaseSchema )

 - DocumentDetailV2 ( MODocument )



И не имеет ни каких ссылок на BaseGridDetailV2



Так же как и родители.

 

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

scr_section_administering_tab_objects_dtl_operations_access.png

Пожелание скрытия в реестре недоступных по правам кнопок недавно как раз завели как идею.

Добавить комментарий

Соломонов Алексей Михайлович пишет:

 - Редактируемая деталь документа ( MOBaseSchema )  - DocumentDetailV2 ( MODocument )

А они от чего наследуются? 

Дмитрий А.,

От MODocument, а тот в свою очередь BaseGridDetailV2. С этим благодаря Вам разобрались.



Вы упомянули про проверку.

1)

if (this.$CanManageCaseDetails === true) {

                        this.callParent(arguments);

                    }



2) В свою очередь

this.$CanManageCaseDetails = result.MOCanManageCasePageDetails;





Вы не могли бы пояснить в каких случаях она (1) срабатывает?

Смотрите выше в коде, где result.MOCanManageCasePageDetails заполняют. Название звучит очень похоже на право на операцию у текущего пользователя.

Соломонов Алексей Михайлович,

без полного кода не совсем понимаю о чем речь. 

предлагаю такой вариант:

define("BCSchema1Detail", ["RightUtilities"], function(RightUtilities) {
	return {
		entitySchemaName: "BCPurchasedServices",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: {
            CanCreateChange: {
                dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                value: true
            }
		},
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
            init: function() {
                this.callParent(arguments);
                this.setUserOperationRightsForCreateChange();
            },
			setUserOperationRightsForCreateChange: function() {
                var operationsToRequest = [];
                // debugger;
                operationsToRequest.push("CanCreateChange");
                RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
                    if (result) {
                        this.set("CanCreateChange", result.CanCreateChange);
                        console.log(result.CanCreateChange);
                    }
                }, this);
            },
			addRecordOperationsMenuItems: function(toolsButtonMenu) {
				var isDetailEnabled = this.get("IsEnabled");
				if (isDetailEnabled === false) {
					return;
				}
				var copyRecordMenuItem = this.getCopyRecordMenuItem();
				if (copyRecordMenuItem) {
					toolsButtonMenu.addItem(copyRecordMenuItem);
				}
				var editRecordMenuItem = this.getEditRecordMenuItem();
				if (editRecordMenuItem) {
					toolsButtonMenu.addItem(editRecordMenuItem);
				}
				if (this.get("CanCreateChange")) {
					var deleteRecordMenuItem = this.getDeleteRecordMenuItem();
					if (deleteRecordMenuItem) {
						toolsButtonMenu.addItem(deleteRecordMenuItem);
					}
				}
				var recordRightsSetupMenuItem = this.getRecordRightsSetupMenuItem();
				if (recordRightsSetupMenuItem) {
					toolsButtonMenu.addItem(recordRightsSetupMenuItem);
				}
			}
		}
	};
});

Вам надо добавить в Права доступа на операцию новую операцию с именем CanCreateChange. Доступ к этой операции - добавляете нужные роли. Если пользователь попадает в эту роль - увидит кнопку "удалить". Иначе не увидит. После добавления роли нужно перелогиниться.

Дмитрий Антохин пишет:

getDeleteRecordMenuItem: Terrasoft.emptyFn

Дмитрий Антохин,

Сложность возникает с асинхронщиной.

Права проверяются гораздо дольше чем формируются элементы.

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



 

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