Вопрос

Создание администрируемой операции.

Коллеги, здравствуйте. 

Как создать администрируемую операцию (вычитка прав)?

Есть поле "Ответственный", оно должно быть доступно для редактирования только сотрудникам, у которых есть доступ к данной операции. 

Нравится

1 комментарий

Операция — просто запись в соответствующей таблице. Затем в коде во всех местах, где нужно проверить наличие прав, выполняют вызов функции проверки и заполнение результатом переменной, к которой уже биндят доступность поля. Например, в карточке 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;
  }

 

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