Цитата:
Изначально опубликовано Сергей Андросов
Хотелось бы разграничить доступ к строкам таблиц по ролям руками
Сергей, насколько я помню, это вам нужно для разграничения доступа к операциям по подразделениям (центрам ответсвенности)? Соответсвенно, придется переписывать практически всю систему. И это не самое лучшее решение.
Цитата:
Изначально опубликовано Сергей Андросов
стандартный механизм фильтрации таблицы прямо в роли тянет за собой некоторые проблемы... Со своими таблицами он еще проходит - а со стандартными не очень...
Может быть я чего то не знаю, но проблема есть одна, когда для вычислении FlowField требуется доступ к данным закрытым фильтром безопасности.
Цитата:
Изначально опубликовано Сергей Андросов
Кстати - если кто-то решал такую проблему - не поделитесь подходом?
Практически эту проблему я не решал, но есть идея как это сделать.
Все таблицы в Attain разделим на 3 вида:
1. Таблицы без SumIndexFields и без FlowFields
2. Таблицы с SumIndexFields
3. Таблицы с FlowFields
С первым видом таблиц вообще никаких проблем не возникается (могут накладываться какие угодно фильтры, ошибок не будет), поэтому мы их не рассматриваем.
Установление фильтров на таблицы второго типа, проблем при работе собственно c таблицей тоже не создает. Проблемы возникают только при работе с таблицами, которые содержать FlowFields, вычисляемые по таким таблицам. Как я уже писал, проблема возникает из-за того, что для вычисления значения FlowField система пытается прочитать данные закрытые фильтром безопасности.
Решение данной проблемы содержится в самой технологии SIFT. Для того, чтобы ограничить набор записей, по которым вычисляется FlowField, нужно использовать FlowFilter. FlowFilter должен быть по тому же параметру, по которому устанавливается фильтр безопасности и иметь тоже значение что и фильтр безопасности.
В вашем случае для ограничения доступа к операциям самым разумным будет использовать для фильтрации одно из глобальных измерений (для примера пусть это будет «Отдел»). Его значения – список подразделений (ЦО). Так как все операции в Attain содержат глобальные измерения в SumIndexFields, а все таблицы, содержащие FlowFields по операциям, уже содержат необходимые FlowFilter, то никаких изменений в системе делать не нужно.
Далее создаются роли. По ролям устанавливаются фильтры безопасности по полю «Отдел Код» таблиц операций, а также по полю «Отдел Filter» таблиц, FlowField которых рассчитываются на основе записей таблиц операций. И в первом и во втором случае для одной роли указывается одно и тоже значение.
Естественно, 100% гарантии не даю, но на небольших тестовых примерах (по бюджетам, финансовым операция) данный подход работает.