Коллеги, здравствуйте.
Как создать администрируемую операцию (вычитка прав)?
Есть поле "Ответственный", оно должно быть доступно для редактирования только сотрудникам, у которых есть доступ к данной операции.
Нравится
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; }
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать