Вопрос

Редактируемый реестр, заблокировать колонки

Проблема в блокировке колонок редактируемого реестра. Почти все колонки завязаны на правилах, а требуется заблокировать всю страницу. Использую:

attributes: {

   "IsModelItemsEnabled": {
      dataValueType: Terrasoft.DataValueType.BOOLEAN,
      value: true,
      dependencies: [{
         columns: ["NavOrderStatus"],
         methodName: "changeNavOrderStatus"
      }]
   }

}

А в методе изменения:

this.set("IsModelItemsEnabled", false);

Поля страницы блокируются, но в детали поля, что завязаны на правилах остаются разблокированными. Пробовал блокировать через метод:

getDefaultCellControlsConfig: function(columnName, params) {
   var config = {
      itemType: Terrasoft.ViewItemType.MODEL_ITEM,
      name: columnName,
      labelConfig: {visible: false},
   };

   if(columnName = "Product" && ...){
      config.enabled = false;
   }


   return Ext.apply(config, params);
}

Что тоже не помогает.. Подскажите, пожалуйста решение данной проблемы.

Нравится

9 комментариев
Лучший ответ

я блокировал через метод generateActiveRowControlsConfig. Ниже представлен мой код, Вам соответственно необходимо убрать всякие условия и просто блокировать поля без разбора

generateActiveRowControlsConfig: function (id, columnsConfig, rowConfig) {
                    this.columnsConfig = columnsConfig;
                    var gridData = this.getGridData();
                    var activeRow = gridData.get(id);
                    var isEditableColumn;
                    if (activeRow.values.IDSBParent === "") {
                        isEditableColumn = this.isEditableParentColumn;
                    }
                    else {
                        isEditableColumn = this.isEditableColumn;
                    }
                    var gridLayoutItems = [];
                    var currentColumnIndex = 0;
                    Terrasoft.each(columnsConfig, function (columnConfig) {
                        var cellConfig = this.getActiveRowCellConfig(columnConfig, currentColumnIndex);
                        cellConfig.enabled = isEditableColumn(cellConfig.name);
                        if (!cellConfig.hasOwnProperty("isNotFound")) {
                            gridLayoutItems.push(cellConfig);
                        }
                        currentColumnIndex += cellConfig.layout.colSpan;
                    }, this);
                    this.applyBusinessRulesForActiveRow(id, gridLayoutItems);
                    var viewGenerator = Ext.create(this.getRowViewGeneratorClassName());
                    viewGenerator.viewModelClass = this;
                    var gridLayoutConfig = viewGenerator.generateGridLayout({
                        name: this.name,
                        items: gridLayoutItems
                    });
                    rowConfig.push(gridLayoutConfig);
                }

 

я блокировал через метод generateActiveRowControlsConfig. Ниже представлен мой код, Вам соответственно необходимо убрать всякие условия и просто блокировать поля без разбора

generateActiveRowControlsConfig: function (id, columnsConfig, rowConfig) {
                    this.columnsConfig = columnsConfig;
                    var gridData = this.getGridData();
                    var activeRow = gridData.get(id);
                    var isEditableColumn;
                    if (activeRow.values.IDSBParent === "") {
                        isEditableColumn = this.isEditableParentColumn;
                    }
                    else {
                        isEditableColumn = this.isEditableColumn;
                    }
                    var gridLayoutItems = [];
                    var currentColumnIndex = 0;
                    Terrasoft.each(columnsConfig, function (columnConfig) {
                        var cellConfig = this.getActiveRowCellConfig(columnConfig, currentColumnIndex);
                        cellConfig.enabled = isEditableColumn(cellConfig.name);
                        if (!cellConfig.hasOwnProperty("isNotFound")) {
                            gridLayoutItems.push(cellConfig);
                        }
                        currentColumnIndex += cellConfig.layout.colSpan;
                    }, this);
                    this.applyBusinessRulesForActiveRow(id, gridLayoutItems);
                    var viewGenerator = Ext.create(this.getRowViewGeneratorClassName());
                    viewGenerator.viewModelClass = this;
                    var gridLayoutConfig = viewGenerator.generateGridLayout({
                        name: this.name,
                        items: gridLayoutItems
                    });
                    rowConfig.push(gridLayoutConfig);
                }

 

Если есть возможность, лучше не блокировать программно, а настроить для этого пользователя для этого объекта или только для конкретных записей прав доступа только на чтение. Так можно будет обезопасить систему от разблокировки самостоятельно пользователем путём правки кода через браузер. Другое дело, что настройка прав не всегда покрывает все возможные случаи, когда пользователю нужно закрыть отдельное поле в отдельной записи.

Хорошо.. сформулирую по другому... Надо заблокировать страницу полностью, исключая все правила и тп. Просто на каждой детали делать метод блокировки и все условия, по которому блокируются это выглядит как то костыльно.

 

Просто забрать у пользователя права на запись на объект детали.

Зверев Александр,

Подскажите, как из кода давать и забирать права. К примеру по клику на кнопку права будут ограничиваться только для чтения

Права определяются содержимым таблиц, для изменения прав нужно добавлять/изменять/удалять записи в них. Например, для прав доступа на записи в разделе контактов это SysContactRight. А если это делать в БП, есть специальный элемент изменения прав.

Дмитрий А.,

Проблема в том, что поля детали не блокируются из-за правил, а делал я именно по этим ссылкам

Если отобрать права доступа, правила будут безразличны.

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