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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.07.2004, 12:35   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
В связи с дикой популярностью вопроса в последнее время, публикую ответ в FAQ.

Вопрос: Как в Аксапте физически реализован RLS (Record Level Security - ограничение доступа на уровне записей)?

Ответ: В Аксапте в запросы по таблицам, на которые настроен RLS, добавляются условия из RLS.
Так например, выглядит запрос по таблице клиентов в обычном виде
[sql]SELECT <<fieldList>>
FROM CUSTTABLE A
WHERE (DATAAREAID=@P1) ORDER BY A.DATAAREAID,A.ACCOUNTNUM OPTION(FAST 1)[/sql]
где DATAAREAID - это разделитель компаний.

А так после наложения двух условий в две группы. Пользователь входит в обе группы.
Первый критерий был задан на группу клиентов как 'ТиУ', второй - 'ПРЧ'.
Обратите внимание, что константы, как обычно, как передаются в параметрах.
И как обычно запрос запоминается в хранимой процедуре, а впоследствии многократно используется.
[sql]SELECT <<fieldList>>
FROM CUSTTABLE A
WHERE (
(DATAAREAID=@P1) AND (
(CUSTGROUP=@P2) OR (CUSTGROUP=@P3)
)
) ORDER BY A.DATAAREAID,A.ACCOUNTNUM OPTION(FAST 1)[/sql]

Если пользователь накладывает свои условия в фильтре, то пользовательские условия добавляются через AND.
Я наложил критерий на наименование '!а*, б*'.
[sql]SELECT <<fieldList>>
FROM CUSTTABLE A
WHERE (
(DATAAREAID=@P1) AND (
(
NOT (({fn ifnull({fn LTRIM(ACCOUNTNUM)},ACCOUNTNUM)} LIKE @P2 ESCAPE ''\'' )) OR ({fn ifnull({fn LTRIM(ACCOUNTNUM)},ACCOUNTNUM)} LIKE @P3 ESCAPE ''\'' )
) AND (
(CUSTGROUP=@P4) OR (CUSTGROUP=@P5)
)
)
) ORDER BY A.DATAAREAID,A.ACCOUNTNUM OPTION(FAST 1)'[/sql]

Обратите внимание, что у таблицы CustTable установлен режим кэширования notInTTS. Это значит, что вне транзакций, Аксапта пользуется значениями из кэша. Для того, чтобы увидеть этот запрос не перезагружая Аксапту, измените свойство CacheLookup у таблицы CustTable. Если у вас нет средств разработки, просто возьмите другую таблицу для экспериментов. Например CustTrans.
__________________
полезное на axForum, github, vk, coub.
Старый 05.07.2004, 16:16   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Совет: Как настроить RLS в Аксапте 3.0
http://axapta.mazzy.ru/hints/rls_setup/

см. также FAQ: Что такое RLS?
__________________
полезное на axForum, github, vk, coub.
Старый 16.08.2004, 17:12   #3  
mpa is offline
mpa
Участник
 
64 / 12 (1) ++
Регистрация: 26.01.2002
Адрес: Москва - Нижний Новгород
Axapta 3.0 CIS SP3 HF2

Используя права групп доступа и RLS (Record Level Security) настраивается доступ:
1. Создается одна группа доступа (например, ТЕСТ), определяются права доступа на просмотр плана счетов и бухгалтерских проводок (Главная книга/ Запросы/ Бухгалтерские проводки).
2. Создается пользователь, который входит только в одну группу ТЕСТ.
3. Настраиваются RLS, создается строка, выбирается группа ТЕСТ. Далее настраивается запрос, в качестве критерия указывается значение «01*».
4. Начинается тестирование…
4.1. Открываем форму «План счетов» – отражаются только субсчета 01 счета. Тест пройден.
4.2. Через расширенный фильтр (Ctrl-F3) в форме «План счетов» пытаемся отыскать субсчета «10*». Результат – «пусто». Тест пройден.
4.3. Открываем запрос «Бухгалтерские проводки». Создаем в запросе поле «Бухг.счет» и открываем поле «Критерий» - в списке только счета «01*». Тест пройден.
4.4. В той же форме указываем в поле «Бухг.счет» явно значение «*», формируем запрос. Система отображает абсолютно все проводки.

P.S. Такая же история и с запросами «Шахматная ведомость», «Анализ счета» и т.п.

Кто-то пытался это обойти без программирования?
Старый 16.08.2004, 17:28   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от mpa
Axapta 3.0 CIS SP3 HF2
4.3. Открываем запрос «Бухгалтерские проводки». Создаем в запросе поле «Бухг.счет» и открываем поле «Критерий» - в списке только счета «01*». Тест пройден.
4.4. В той же форме указываем в поле «Бухг.счет» явно значение «*», формируем запрос. Система отображает абсолютно все проводки.

P.S. Такая же история и с запросами «Шахматная ведомость», «Анализ счета» и т.п.

Кто-то пытался это обойти без программирования?
А что ненормального в том, что, настроив RLS на плане счетов, Вы не получили RLS-а на проводках? На LedgerTrans RLS ведь не настроен
__________________
-ТСЯ или -ТЬСЯ ?
Старый 16.08.2004, 18:25   #5  
komar is offline
komar
Шаман форума
Аватар для komar
Ex AND Project
 
5,571 / 600 (32) +++++++
Регистрация: 24.05.2002
Контроль связанных таблиц - ручками. :-)
__________________
All information in this post is strictly confidential. If you have read it in error, please forget it immediately.
Старый 16.08.2004, 19:23   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
и это правильно.
__________________
полезное на axForum, github, vk, coub.
Старый 17.08.2004, 05:52   #7  
mpa is offline
mpa
Участник
 
64 / 12 (1) ++
Регистрация: 26.01.2002
Адрес: Москва - Нижний Новгород
После рабочего дня вопросы задавать опасно ночью может ответ присниться.

Конечно вы все правы, так оно и должно быть.
Старый 25.08.2005, 22:02   #8  
glibs_imported is offline
glibs_imported
Участник
 
202 / 10 (1) +
Регистрация: 04.11.2003
Опечатка.

"
...
Причем менеджеры, работающие с российскими клиентами не должны видеть зарубежных клиентов. Мало того, менеджеры даже видеть их не должны.
...
"

Это мсло масляное. Наверное, мысль неправильно сформулирована.

(Данное сообщение нужно потом удалить)
Старый 25.08.2005, 23:38   #9  
glibs_imported is offline
glibs_imported
Участник
 
202 / 10 (1) +
Регистрация: 04.11.2003
Сюда стоит добавить, что RLS мможно настроить на View и будет работать. Но через стандартный интерфейс настройка недоступна. Можно поискать ссылки на обсуждения.

Еще есть нюансы с работой/неработой RLS из Х++ кода по умолчанию.

Не знаю, новость ли это для остальных, но приятная. Если у пользователя нет доступа к определенному значению из таблицы на уовне RLS, то validate relation-а на таблице в lookup срабатывает корректно. Т.е. если есть две группы клиентов Х и У, я могу видеть только группу Х, то создать запись в таблице клиентов и вручную ввести группу У система не позволяет. Раньше с этим были проблемы.
Старый 26.08.2005, 00:06   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 03.03.2006, 11:22   #11  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Захотелось дополнить (может не заметил в ветке).

ИМХО, RLS работает только при наличи доступа к таблицам для которых он настраивается у той же группы пользователей. Бывает что для одной группы пользователей настраивется RLS, а в другой группе дан доступ к таблице (но RLS не используется), при такой ситуации иногда RLS не работают.
Лучше RLS и доступ к таблицам участвующим в RLS делать в одной группе пользователей.
Старый 31.05.2006, 23:54   #12  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
RLS naprimer ne rabotaet dlja formy InventOnhandItem.. da i vo vseh formah, gde privjazana tablica InventDim... (filtr nuzhno postavit' na InventLocationId - ne poluchajestja )
Старый 26.07.2007, 15:15   #13  
GuraAV is offline
GuraAV
Участник
 
4 / 15 (1) ++
Регистрация: 10.10.2006
Адрес: Украина, г.Киев
Цитата:
Сообщение от Delfins Посмотреть сообщение
RLS naprimer ne rabotaet dlja formy InventOnhandItem.. da i vo vseh formah, gde privjazana tablica InventDim... (filtr nuzhno postavit' na InventLocationId - ne poluchajestja )
Для того что бы настроить RLS во всех формах где привязана таблица InventDim, соответственно нужно и настраивать на таблицу InventDim.
Описание приведено для AX 4.0.
1) Создаем две группы пользователей например Group и rLocation.
- Group - Определяем необходимые права для данной группы пользователей, но нужно обязательно отключить доступ ("Нет доступа") в данной группе для InventDim (Права доступа - Контроль доступа - Основной - Таблицы - Складские аналитики). Если пользователь будет включен в несколько групп кроме Group и rLocation, в них тоже необходимо отключить доступ к таблице InventDim.
- rLocation - Данная группа будет использоваться для настройки RLS. В ней определяются права доступа только на InventDim (Права доступа - Контроль доступа - Основной - Таблицы - Складские аналитики). Все остальное имеет значение "Нет доступа".
2) После настройки вышеуказанного, перейдем непосредственно к настройке RLS по складу. Открываем форму "Безопасность на уровне записей", создаем новую строку, откроется мастер, нажимаем кнопку "Вперед". Указываем нашу группу rLocation и нажимаем кнопку "Вперед", выбираем "Показать все таблицы" и выбираем "Основной" - "Складские аналитики", нажимаем кнопку "Вперед" и "Готово". Затем в форме "Безопасность на уровне записей" становимся на созданную строку и нажимаем кнопку "Запрос". В открывшейся форме в поле "Поле" меняем значение на "Склад" и в поле "Критерии" выбираем нужный склад.
3) Добавляем пользователей в данные группы. Во всех формах и таблицах, в которых содержиться поле InventDimId будут отображаться только те записи которые соответствуют складу выбранному в поле "Критерии".
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:43.