Оригинал на GitHub
Вопрос
В таблице циклов 3 расчетных таблицы. Пользователю нужно дать доступ к самой таблице циклов и только к последней расчетной из них (например, с sort 30). При переходе из таблицы циклов переход осуществляется только в первую с сортом 10, к которой доступ запрещён. Как попадать не в первую, а в любую другую?
Ответ
Нужно модифицировать код кнопки Открыть (стандартное поле в таблице циклов, создается автоматически). Базово она не учитывает доступы к таблицам:
=: linkToTable(table: $table_search; cycle: #id; target: 'self' )
table_search: if(condition: $filter = $#lc; then: $error; else: $filter[0][id])
~filter: listFilter(list: $combine_roles; key: "roles" = $#nr)
error: errorException(text: "No have avaliable tables")
combine_roles: listReplace(list: $tables; action: "roles" = $roles; value: "value")
tables: selectRowList(table: 'tables'; field: 'edit_roles'; field: 'read_roles'; field: 'id'; where: 'type' = "calcs"; where: 'tree_node_id' = $#nti; order: 'sort')
roles: listUniq(list: $listadd)
listadd: listAdd(list: $#value[edit_roles]; list: $#value[read_roles])
Таблицы хранятся в tables и мы будем проверять edit_roles и read_roles. Возьмем список таблиц которые относятся к текущей таблице циклов с сортировкой по sort по возрастанию. Сначала при помощи listReplace объединим роли в одно поле roles и потом отфильтруем этот список по соответсвию текущим ролям пользователя.
Если есть совпадение, то будет непустой список и мы возьмем id таблицы из первой строки. Если совпадений не будет, то получится пустой список (недоступна ни одна таблица) и выдедем ошибку.