Создание администрируемой операции.
13 сентября 2019 13:09
Коллеги, здравствуйте.
Как создать администрируемую операцию (вычитка прав)?
Есть поле "Ответственный", оно должно быть доступно для редактирования только сотрудникам, у которых есть доступ к данной операции.
Нравится
1 комментарий
16 сентября 2019 12:35
Операция — просто запись в соответствующей таблице. Затем в коде во всех местах, где нужно проверить наличие прав, выполняют вызов функции проверки и заполнение результатом переменной, к которой уже биндят доступность поля. Например, в карточке CasePage для поля SatisfactionLevel привязка к переменной CanChangeCaseSatisfactionLevel:
{
"operation": "insert",
"name": "SatisfactionLevel",
"values": {
"layout": {
"column": 0,
"row": 0,
"colSpan": 12,
"rowSpan": 1
},
"tip": {
"content": {"bindTo": "Resources.Strings.SatisfactionLevelTip"},
"displayMode": Terrasoft.controls.TipEnums.displayMode.WIDE
},
"bindTo": "SatisfactionLevel",
"enabled": {"bindTo": "CanChangeCaseSatisfactionLevel"},
"contentType": this.Terrasoft.ContentType.ENUM
},
"parentName": "FeedbackControlGroup_GridLayout",
"propertyName": "items"
}Ниже сама переменная:
/**
* CanChangeCaseSatisfactionLevel enable flag.
*/
"CanChangeCaseSatisfactionLevel": {
dataValueType: this.Terrasoft.DataValueType.BOOLEAN
},И ещё ниже считывание туда из прав на операцию заодно с ещё одной:
getUserSettingsOperationRight: function() {
var operationsToRequest = [];
operationsToRequest.push("CanManageWorkplaceSettings");
operationsToRequest.push("CanChangeCaseSatisfactionLevel");
RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
if (result) {
this.set("CanManageWorkplaceSetting", result.CanManageWorkplaceSettings);
this.set("CanChangeCaseSatisfactionLevel", result.CanChangeCaseSatisfactionLevel);
}
this.setRegisteredOnTipContent();
}, this);
},И, чтобы не жульничали, проверка той же операции на стороне серверной логики, в БП объекта Case:
public virtual bool CaseValidatingScriptTaskExecute(ProcessExecutingContext context) {
if (Entity.GetChangedColumnValues().Any(c =>
((c.Name == "SatisfactionLevelId" && c.OldValue != c.Value)
|| (c.Name == "SatisfactionLevelComment"
&& !(String.IsNullOrEmpty(c.OldValue as string) && String.IsNullOrEmpty(c.Value as string)))))) {
if(!UserConnection.DBSecurityEngine.GetCanExecuteOperation("CanChangeCaseSatisfactionLevel")) {
string validationMessageText = new LocalizableString(UserConnection.Workspace.ResourceStorage,
"CasePage", "LocalizableStrings.SatisfactionLevelTip.Value");
Entity.ValidationMessages.Add(
new EntityValidationMessage {
Text = validationMessageText
});
return false;
}
}
return true;
}
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать