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