Проблема при использовании constraintOperationType и constraintCode

Доброго дня.

Платформа: 7.2.4
Пытаюсь использовать constraintOperationType и constraintCode для action в groupTable:

<action id="test" trackSelection="true" constraintOperationType="custom" 
constraintCode="test" caption="test"/>

Добавил constraint для группы:

[
  {
    "_entityName": "sec$Group",
    "id": "0fa2b1a5-1d68-4d69-9fbd-dff348347f93",
    "version": 0,
    "constraints": [
      {
        "_entityName": "sec$Constraint",
        "id": "56ec5fc2-937e-d306-33a0-4f2a26bacaf8",
        "checkType": "MEMORY",
        "code": "test",
        "groovyScript": "return false",
        "isActive": true,
        "version": 1,
        "entityName": "actionconstaint_NewEntity",
        "operationType": "CUSTOM",
        "group": {
          "_entityName": "sec$Group",
          "id": "0fa2b1a5-1d68-4d69-9fbd-dff348347f93"
        }
      }
    ],
    "name": "Company",
    "sessionAttributes": []
  }
]

Не работает. Кнопка с action всегда доступна. Проблема еще в том, что в документации это не описано.

Нашел в соседнем форуме:

Там, как я понял, не работало только декларативно. В моем случае, если назначать эти свойства программно, ничего не меняется (может, конечно и action создавать нужно).

Добавлю сюда же, если посчитаете, что целесообразно разделить - сделаю.

Добавляю роль:

Сведения
[
  {
    "_entityName": "sec$Role",
    "id": "78a13145-1ef6-1bc5-934a-4535c8970d55",
    "securityScope": "GENERIC_UI",
    "type": "STANDARD",
    "version": 1,
    "locSecurityScope": "Generic UI",
    "permissions": [
      {
        "_entityName": "sec$Permission",
        "id": "c05bd073-724e-5870-721b-c369eae56f00",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "UI",
        "version": 1,
        "value": 0,
        "target": "actionconstaint_NewEntity.browse:test"
      },
      {
        "_entityName": "sec$Permission",
        "id": "fcbc1e8e-c98a-cc38-7557-fed630cf514c",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "ENTITY_OP",
        "version": 1,
        "value": 1,
        "target": "actionconstaint_NewEntity:create"
      },
      {
        "_entityName": "sec$Permission",
        "id": "c943057a-3874-bbba-9b27-7d85f7ed4b7e",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "SCREEN",
        "version": 1,
        "value": 1,
        "target": "actionconstaint_NewEntity.edit"
      },
      {
        "_entityName": "sec$Permission",
        "id": "181f54d6-3643-a861-897d-1755fb7e4a3a",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "ENTITY_OP",
        "version": 1,
        "value": 1,
        "target": "actionconstaint_NewEntity:read"
      },
      {
        "_entityName": "sec$Permission",
        "id": "daa849bd-a6d3-3e20-114e-3ea78d0adb2d",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "ENTITY_OP",
        "version": 1,
        "value": 1,
        "target": "actionconstaint_NewEntity:delete"
      },
      {
        "_entityName": "sec$Permission",
        "id": "a606b545-22c4-7871-724d-121003be0269",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "ENTITY_OP",
        "version": 1,
        "value": 1,
        "target": "actionconstaint_NewEntity:update"
      },
      {
        "_entityName": "sec$Permission",
        "id": "10896c5f-2c2b-a840-015e-d89fbd1bc9ba",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "SCREEN",
        "version": 1,
        "value": 1,
        "target": "application-actionconstaint"
      },
      {
        "_entityName": "sec$Permission",
        "id": "77e322de-d874-c353-aaf0-0542ec569e73",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "ENTITY_ATTR",
        "version": 1,
        "value": 2,
        "target": "*:*"
      },
      {
        "_entityName": "sec$Permission",
        "id": "b1891459-4881-cb82-96e1-d7a2b17e8e11",
        "role": {
          "_entityName": "sec$Role",
          "id": "78a13145-1ef6-1bc5-934a-4535c8970d55"
        },
        "type": "SCREEN",
        "version": 1,
        "value": 1,
        "target": "actionconstaint_NewEntity.browse"
      }
    ],
    "name": "base"
  }
]

Создаю пользователя с двумя ролями: system-minimal и base.
В роли настроено скрытие action test. Логинюсь под созданным пользователем - кнопка активна.
Тут в отличии от первого случая, в документации описание есть:

BaseAction видим (visible), если:

  • метод setVisible(false) не вызывался;
  • для действия не установлено UI разрешение hide .

Кстати, если проверить в событиях, то метод isVisibleByUiPermissions возвращает тоже true.

Уважаемые разработчики платформы. Все еще актуально. Прокомментируйте, пожалуйста.

Михайл,
При наследование от BaseAction настройки RowLevel security не проверяются. Для того чтобы заработало попробуйте использовать наследование от com.haulmont.cuba.gui.components.actions.ItemTrackingAction. В этом случае должны примениться настройки по RLS.

Так у меня action объявлен как trackSelection="true". С этой точки зрения все нормально…

Спасибо, что сообщили о проблеме. Мы завели тикет в GitHub.

Как происходит простановка action на таблицу. Скорее всего это вызов в коде setAction/addAction и action это проектный класс. Не могли бы вы привести пример кода этого action?

Андрей, нет, это декларативное добавление к таблице. Собственно, в первом посте оно есть:

<action id="test" trackSelection="true" constraintOperationType="custom" 
constraintCode="test" caption="test"/>

Сам action к этому моменту еще не имеет реализации.

Михаил, извиняюсь, я не увидел invoke в определение xml, поэтому подумал о том, что action создается в коде. Попробую воспроизвести, отпишусь чуть позже.

Андрей, так может если проблема в том, что action не имеет реализации, тогда это и не проблема платформы? Вечером (проект на другом ПК) попробую добавить реализацию, отпишусь.

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

Спасибо, что сообщили о проблеме. Мы завели тикет в GitHub.

Согласно документации:

Чтобы установить разрешение на действие, необходимо указать идентификатор компонента, содержащего действие, а затем идентификатор действия в угловых скобках. Например: customersTable<changeGrade> .

Настройте вашу роль по такому же принципу, действие и кнопка скроются.

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

Визуальный редактор показывает дерево компонентов для экрана с их id и дает возможность последовательно копировать id необходимых компонентов в поле Component. Он не генерирует правильный путь до компонента. Все необходимые знаки типа <> , . и т.д. нужно проставлять самостоятельно.

1 симпатия

А мог бы генерировать правильный путь…