|
07.10.2010, 18:50 | #1 |
Administrator
|
настройка прав пользователя, очевидно
|
|
07.10.2010, 22:44 | #2 |
MCTS
|
|
|
08.10.2010, 09:18 | #3 |
Участник
|
|
|
08.10.2010, 09:13 | #4 |
Участник
|
Раз на форме отображаются только выборочные по фильтру записи, то фильтры защиты работают. А раз они работают, то как я понимаю выход за разрешённый диапазон должен сопровождаться ошибкой. Как можно так настроить права доступа, чтобы форма фильтровалась секьюрити фильтрами, а в коде был полный игнор их?
|
|
08.10.2010, 11:10 | #5 |
Участник
|
Цитата:
Сообщение от grif
Раз на форме отображаются только выборочные по фильтру записи, то фильтры защиты работают. А раз они работают, то как я понимаю выход за разрешённый диапазон должен сопровождаться ошибкой. Как можно так настроить права доступа, чтобы форма фильтровалась секьюрити фильтрами, а в коде был полный игнор их?
В коде, если не применять инструкцию SETPERMISSIONFILTER() секьюрити фильтры применяться не будут, делать можно все, что угодно в коде. Но при попытке открыть форму на записи из закрытого диапазона возникнет ошибка. Включатся форменные механизмы обработки фильтров. |
|
08.10.2010, 11:26 | #6 |
Участник
|
Цитата:
Сообщение от romeo
Настроенные секьюрити фильтры работают на формах, для этого ничего дополнительно писать не нужно. Видимо эти фильтры неявно накладываются.
В коде, если не применять инструкцию SETPERMISSIONFILTER() секьюрити фильтры применяться не будут, делать можно все, что угодно в коде. Но при попытке открыть форму на записи из закрытого диапазона возникнет ошибка. Включатся форменные механизмы обработки фильтров. |
|
08.10.2010, 11:29 | #7 |
Участник
|
Нет, в коде ошибка при чтении записи из запрещенного диапазона вываливаться не должна. Именно поэтому почти бессмысленно настраивать секьюрити фильтры на функиональность, которая широко юзается. Потому что образовавшихся брешей и дыр будет немеряно. Закрыть ими можно и целесообразно что-то новое, написанное недавно.
|
|
08.10.2010, 12:00 | #8 |
Administrator
|
раз проблема так актуальна, то очередной раз акцентирую на возможное различие в правах пользователя, под которым тестируете!
может быть у него какая-то такая роль есть, которая снимает это ограничение (предоставляет доступ ко всей таблице)? нигде вместо "да" не стоит "косвенно"? опять же, Андрей прав, синхренизированы ли пользователи? с лицензией вряд ли связано: либо видим, либо не видим. пермишны на объектах одинаковые, раз объекты одинаковые. |
|
08.10.2010, 14:11 | #9 |
Administrator
|
снести зуп файлы?
Бог знает что там может быть понаписано... |
|
08.10.2010, 14:28 | #10 |
Участник
|
|
|
08.10.2010, 14:35 | #11 |
Administrator
|
))))))))
востановить таблицы? индексы послетали? ну у меня креатив кончился жду результатов |
|
08.10.2010, 14:40 | #12 |
Участник
|
Есть возможность настраивать секьюрити фильтры для фирмы.. Может быть фирмы разные в двух базах? ))
|
|
09.10.2010, 15:05 | #13 |
Участник
|
Цитата:
Если перейти к конкретике, то права настроены для всех фирм и сделано это одинаково в двух базах. |
|
09.10.2010, 15:14 | #14 |
Участник
|
Тестирую на таблице-справочнике в которой 100 записей. Фильтрую по первичному ключу (одно поле Code). Да и проблема на нескольких разных таблицах выявляется. Кстати ещё выяснил, что вызов функции SETPERMISSIONFILTER не устанавливает никаких фильтров на запись
|
|
09.10.2010, 16:03 | #15 |
Участник
|
Чтобы не было мысли что я где-то дезинформирую, распишу по шагам свои действия.
Создана новая роль у которой установлены следующие права доступа: Код: Тип Объекта Объект ID Имя Объекта Чтение Вставка Изменение Удаление Запуск Фильтр защиты Данные 14 Склад Да Да Да Да Да Location: Код=ТРАНЗИТ Таблица 0 Да Да Да Да Да Форма 0 Да Да Да Да Да Система 0 Да Да Да Да Да Permissions для таблицы 14 - <Undefined> Permissions для тестовой формы - <Undefined> На форме добавлена кнопка с кодом Код: Name DataType Subtype Length _Loc Record Location _Loc.FINDFIRST; _Loc.SETPERMISSIONFILTER; MESSAGE(_Loc.Code); Если убрать строку _Loc.SETPERMISSIONFILTER, то ничего не меняется. При этом если зайти в Object Designer и глянуть записи для Table 14 Location, то видна только одна запись (смотрю там специально, чтобы вы не предположили что на форме были сохранены фильтры) Причём вот такой код Код: _Perm.SETRANGE(_Perm."Role ID",'ТЕСТ'); _Perm.SETRANGE(_Perm."Object Type",_Perm."Object Type"::"Table Data"); _Perm.FINDFIRST; MESSAGE(FORMAT(_Perm."Object ID")+' '+FORMAT(_Perm."Security Filter")); Цитата:
---------------------------
Microsoft Business Solutions-Navision --------------------------- 14 Location: Код=ТРАНЗИТ --------------------------- ОК --------------------------- |
|
11.10.2010, 15:38 | #16 |
Участник
|
Немного всё таки дезинформировал из-за спешки
В коде установка фильтров безопасности стояла не в том месте Код: _Loc.FINDFIRST; _Loc.SETPERMISSIONFILTER; MESSAGE(_Loc.Code); Код: _Loc.SETPERMISSIONFILTER; _Loc.FINDFIRST; MESSAGE(_Loc.Code); |
|
11.10.2010, 16:07 | #17 |
Участник
|
Не должно быть ошибки - код всегда работает с полным набором данных.
Хотите наложить в коде "фильтры доступа" - вызывайте SETPERMISSIONFILTER |
|