Как убрать действие "Копировать/Изменить/Удалить" в детали
Как убрать действие "Удалить" в детали.
Речь идет о кнопках "Копировать/изменить/удалить" во всплывающем окне детали.
И второе, как удалить их у конкретных орг. ролей., т.е. что бы у указанных орг. ролей не было этих кнопок, у остальных были.
Необходимо забрать доступ к действию "удалить" в конкретной детали
Нравится
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
Так же как и родители.
Если логика наличия доступа к действию связана с ролями, то лучше действительно, как посоветовал Владимир, настроить доступ на удаление к объекту этой детали штатными средствами:
Пожелание скрытия в реестре недоступных по правам кнопок недавно как раз завели как идею.
Добавить комментарий
Соломонов Алексей Михайлович пишет:
- Редактируемая деталь документа ( 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
Дмитрий Антохин,
Сложность возникает с асинхронщиной.
Права проверяются гораздо дольше чем формируются элементы.
В итоге берутся значение из атрибута которое установлено по умолчанию.