AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.04.2003, 10:14   #1  
Сергей Андросов is offline
Сергей Андросов
Участник
 
6 / 10 (1) +
Регистрация: 19.02.2003
Текущая роль пользователя
Здравствуйте все!

Никто не подскажет - можно ли в C/AL коде получить роль текущего пользователя?
Хотя бы ее название...

Хотелось бы разграничить доступ к строкам таблиц по ролям руками - потому что
стандартный механизм фильтрации таблицы прямо в роли тянет за собой некоторые проблемы... Со своими таблицами он еще проходит - а со стандартными не очень...
Кстати - если кто-то решал такую проблему - не поделитесь подходом?

C уважением!
Сергей Андросов.
Старый 29.04.2003, 11:44   #2  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
можешь посмотреть темы "Роли в Attain" и "безопасность в attain" - там все это обсуждалось
Старый 29.04.2003, 12:01   #3  
Perec is offline
Perec
Участник
 
129 / 10 (1) +
Регистрация: 18.02.2003
Адрес: Москва
Добрый день.

Я думаю можно попробовать так:

1.

Определить globals:
user: Code
role: Code
MemberOf: Record (MemberOf)

2.

User := USERID;
MemberOf.SETFILTER("User ID", User);
if MemberOf.FIND('-') then Role := MemberOf."Role ID";
Старый 30.04.2003, 12:28   #4  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
Re: Текущая роль пользователя
Цитата:
Изначально опубликовано Сергей Андросов
Хотелось бы разграничить доступ к строкам таблиц по ролям руками
Сергей, насколько я помню, это вам нужно для разграничения доступа к операциям по подразделениям (центрам ответсвенности)? Соответсвенно, придется переписывать практически всю систему. И это не самое лучшее решение.

Цитата:
Изначально опубликовано Сергей Андросов
стандартный механизм фильтрации таблицы прямо в роли тянет за собой некоторые проблемы... Со своими таблицами он еще проходит - а со стандартными не очень...
Может быть я чего то не знаю, но проблема есть одна, когда для вычислении FlowField требуется доступ к данным закрытым фильтром безопасности.

Цитата:
Изначально опубликовано Сергей Андросов
Кстати - если кто-то решал такую проблему - не поделитесь подходом?
Практически эту проблему я не решал, но есть идея как это сделать.

Все таблицы в Attain разделим на 3 вида:
1. Таблицы без SumIndexFields и без FlowFields
2. Таблицы с SumIndexFields
3. Таблицы с FlowFields

С первым видом таблиц вообще никаких проблем не возникается (могут накладываться какие угодно фильтры, ошибок не будет), поэтому мы их не рассматриваем.

Установление фильтров на таблицы второго типа, проблем при работе собственно c таблицей тоже не создает. Проблемы возникают только при работе с таблицами, которые содержать FlowFields, вычисляемые по таким таблицам. Как я уже писал, проблема возникает из-за того, что для вычисления значения FlowField система пытается прочитать данные закрытые фильтром безопасности.

Решение данной проблемы содержится в самой технологии SIFT. Для того, чтобы ограничить набор записей, по которым вычисляется FlowField, нужно использовать FlowFilter. FlowFilter должен быть по тому же параметру, по которому устанавливается фильтр безопасности и иметь тоже значение что и фильтр безопасности.

В вашем случае для ограничения доступа к операциям самым разумным будет использовать для фильтрации одно из глобальных измерений (для примера пусть это будет «Отдел»). Его значения – список подразделений (ЦО). Так как все операции в Attain содержат глобальные измерения в SumIndexFields, а все таблицы, содержащие FlowFields по операциям, уже содержат необходимые FlowFilter, то никаких изменений в системе делать не нужно.

Далее создаются роли. По ролям устанавливаются фильтры безопасности по полю «Отдел Код» таблиц операций, а также по полю «Отдел Filter» таблиц, FlowField которых рассчитываются на основе записей таблиц операций. И в первом и во втором случае для одной роли указывается одно и тоже значение.

Естественно, 100% гарантии не даю, но на небольших тестовых примерах (по бюджетам, финансовым операция) данный подход работает.
Старый 30.04.2003, 12:56   #5  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
этот подход верный только в отношении операций - но здесь тоже есть подвох.
нажав "показать все" - все операции и соответственно суммы становятся доступны.
хотя если задача только в том чтобы пользователь просто не видел ненужной информации - то проблем нет.
Старый 30.04.2003, 13:35   #6  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
Цитата:
Изначально опубликовано Alex_V
этот подход верный только в отношении операций
Данный подход верен для всех таблиц между которыми существуют определенные отношения. Пример с глобальными измерениями был приведен просто потому, что он наиболее простой (не требует модификации системы) и , главное, решает задачу Сергея.

Даже если в таблице с FlowField нет нужного FlowFilter его намного проще добавить, чем переписывать код системы а затем еще иметь проблемы с обновлениями версий.

Других ограничений у данного подхода я не вижу. Если это не так, то жду пример на базе стандартной функциональности.

Цитата:
Изначально опубликовано Alex_V
но здесь тоже есть подвох. нажав "показать все" - все операции и соответственно суммы становятся доступны.
Фильтр, установленный через права роли, не снимается. Система выдаст ошибку. Что-то вроде "Вы не имеете прав на доступ к таким-то данным"

Цитата:
Изначально опубликовано Alex_V
хотя если задача только в том чтобы пользователь просто не видел ненужной информации - то проблем нет.
А для чего еще могут использовться фильтры?
Старый 30.04.2003, 13:46   #7  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
можешь попробовать на примере таблицы 374 - G/L Acc. Budget Buffer - она используется при отображении сумм по бюджетным операциям. Установи фильтр на поле Global Dimension 1 Filter (естественно должны быть бюджетные операции с данным кодом и значением измерения). при просмотре итогов - вываливаются все операции на кнопку "показать все" (это без всяких модификаций кода). И кстати по поводу сообщения - в ряде случаев оно выскакивает уже после того как отображены "недоступные" операции.

Ненужная информация - та которая просто не должна мозолить пользователю глаза.
А есть еще понятие - недоступной информации - которую пользователь не может получить ни в каких случаях.
Старый 30.04.2003, 14:15   #8  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
Цитата:
Изначально опубликовано Alex_V
можешь попробовать на примере таблицы 374 - G/L Acc. Budget Buffer - она используется при отображении сумм по бюджетным операциям. Установи фильтр на поле Global Dimension 1 Filter (естественно должны быть бюджетные операции с данным кодом и значением измерения). при просмотре итогов - вываливаются все операции на кнопку "показать все" (это без всяких модификаций кода). И кстати по поводу сообщения - в ряде случаев оно выскакивает уже после того как отображены "недоступные" операции.
В приаттаченном файле скриншот окна настройки роли в моем тестовом примере. Пользователю нужно дать роли All и с настройками.

Никаких перечисленных тобой симптомов не обнаружено.

P.S. Поле "Отдел Фильтр" в форме бюджета недоступно для изменения
P.P.S. Версия Attain 3.60.01

Вложения
Тип файла: img11972-1 (92.2 Кб, 859 просмотров)
Тип файла: img11972-2 (108.7 Кб, 743 просмотров)
Старый 30.04.2003, 14:25   #9  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
Что-то картинки не сохраняются
Миниатюры
Нажмите на изображение для увеличения
Название: безымянный1.jpg
Просмотров: 394
Размер:	92.2 Кб
ID:	209  
Старый 30.04.2003, 14:48   #10  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
делал все аналогично - но результат - такой как я сказал (видим отфильтрованные по коду измерения но при нажатии показать все(в форме 120-G/L Budget Entries) - показывается все). плюс еще - при таком выставлении фильтров - в бюджетные операции(форма 120-G/L Budget Entries) нельзя добавить новую операцию - ф-ия GET которая используется для получения последнего номера - также ругается на права доступа.
Старый 30.04.2003, 15:43   #11  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
Цитата:
Изначально опубликовано Alex_V
делал все аналогично - но результат - такой как я сказал (видим отфильтрованные по коду измерения но при нажатии показать все(в форме 120-G/L Budget Entries) - показывается все).
Объясни мне как в этой форме могут появиться все записи, если ты специально для этой таблицы установил фильтр безопасности? Сдается мне, что для таблицы 96 ты никакого фильтра не установил.
Старый 30.04.2003, 15:49   #12  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
да верно-моя ошибка - не уточнил. смысл в том что я его не ставил как раз по причине-нельзя добавить новые записи в этом случае. Установка фильтров на таблицы операций во всех случаях в конечном итоге приведет к ошибке нарушения прав доступа.
Старый 30.04.2003, 15:55   #13  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
Цитата:
Изначально опубликовано Alex_V
да верно-моя ошибка - не уточнил. смысл в том что я его не ставил как раз по причине-нельзя добавить новые записи в этом случае. Установка фильтров на таблицы операций во всех случаях в конечном итоге приведет к ошибке нарушения прав доступа.
А ты не думай. Просто сделай как это описано в скиншоте. А записи новые очень хорошо добавляются с нужным значением глобального измерения.

P.S. Хотя может ты уже переписал весь Attain (см. безопасностьв Attain)? И мы говорим о различных системах?
Старый 05.05.2003, 08:07   #14  
Grizzly is offline
Grizzly
Участник
 
85 / 10 (1) +
Регистрация: 30.01.2003
Адрес: Омск
Забираю свои слова относительно того, что можно реализовать систему безопасности на уровне записи без модификации системы. Alex_V оказался прав. Т.е. технологически это возможно (на этом основывалось мое утверждение), но практика программирования, принятая в Attain, когда программисты пишут код в предположении, что они имеют доступ ко всей таблице, этому препятствует. Например, в нашем примере с операциями бюджета формировние ИД новой записи производится следующим образом (Table 96 G/L Budget Entry):

LOCAL PROCEDURE GetNextEntryNo@4() : Integer;
VAR
GLBudgetEntry@1000 : Record 96;
BEGIN
GLBudgetEntry.SETCURRENTKEY("Entry No.");
IF GLBudgetEntry.FIND('+') THEN
EXIT(GLBudgetEntry."Entry No." + 1)
ELSE
EXIT(1);
END;

Естественно, если этот код выполняется от имени пользователя, который не видит всех данных, то он будет работать некорректно. Аналогичным образом производится формирование ИД практически для всех операций :-(.
Старый 05.05.2003, 11:31   #15  
Alex_V is offline
Alex_V
Участник
 
159 / 10 (1) +
Регистрация: 19.02.2003
именно это я и имел ввиду - просто переделывал сам подобные вещи - хорошо что задача оказалась небольшой по размеру
Старый 11.11.2004, 09:21   #16  
Albert is offline
Albert
Участник
 
2 / 10 (1) +
Регистрация: 11.11.2004
Средство безопасности на уровне записей
Нам удалось разработать средство, которое позволяет обеспечить доступ на уровне записей. Мы смогли разделить доступ к таблице "Фин. Книга Операций" по разным счетам. Т.е. в нашем случае пользователи получили доступ только к разрешенным счетам из плана счетов. Учетные процедуры работают без проблем.

Если кого-то интересует наше опыт, шлите письма по адресу albert@infosco.com
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Настройки отдельного пользователя Greggy NAV: Программирование 12 27.10.2004 08:17
Настройки пользователя Dmitry_Y NAV: Администрирование 9 27.04.2004 12:08
Задание Кода пользователя для БД из командной строки Mary NAV: Администрирование 7 05.03.2004 11:48
Attain. Конфликт фильтра по таблице и фильтра в правах пользователя Evgeniy NAV: Программирование 2 15.07.2003 13:57

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:10.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.