04.07.2004, 12:35 | #1 |
Участник
|
В связи с дикой популярностью вопроса в последнее время, публикую ответ в 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. |
|
05.07.2004, 16:16 | #2 |
Участник
|
Совет: Как настроить RLS в Аксапте 3.0
http://axapta.mazzy.ru/hints/rls_setup/ см. также FAQ: Что такое RLS? |
|
16.08.2004, 17:12 | #3 |
Участник
|
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 |
Модератор
|
Цитата:
Сообщение от mpa
Axapta 3.0 CIS SP3 HF2
4.3. Открываем запрос «Бухгалтерские проводки». Создаем в запросе поле «Бухг.счет» и открываем поле «Критерий» - в списке только счета «01*». Тест пройден. 4.4. В той же форме указываем в поле «Бухг.счет» явно значение «*», формируем запрос. Система отображает абсолютно все проводки. P.S. Такая же история и с запросами «Шахматная ведомость», «Анализ счета» и т.п. Кто-то пытался это обойти без программирования?
__________________
-ТСЯ или -ТЬСЯ ? |
|
16.08.2004, 18:25 | #5 |
Шаман форума
|
Контроль связанных таблиц - ручками. :-)
__________________
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 |
Участник
|
и это правильно.
|
|
17.08.2004, 05:52 | #7 |
Участник
|
После рабочего дня вопросы задавать опасно ночью может ответ присниться.
Конечно вы все правы, так оно и должно быть. |
|
25.08.2005, 22:02 | #8 |
Участник
|
Опечатка.
" ... Причем менеджеры, работающие с российскими клиентами не должны видеть зарубежных клиентов. Мало того, менеджеры даже видеть их не должны. ... " Это мсло масляное. Наверное, мысль неправильно сформулирована. (Данное сообщение нужно потом удалить) |
|
25.08.2005, 23:38 | #9 |
Участник
|
Сюда стоит добавить, что RLS мможно настроить на View и будет работать. Но через стандартный интерфейс настройка недоступна. Можно поискать ссылки на обсуждения.
Еще есть нюансы с работой/неработой RLS из Х++ кода по умолчанию. Не знаю, новость ли это для остальных, но приятная. Если у пользователя нет доступа к определенному значению из таблицы на уовне RLS, то validate relation-а на таблице в lookup срабатывает корректно. Т.е. если есть две группы клиентов Х и У, я могу видеть только группу Х, то создать запись в таблице клиентов и вручную ввести группу У система не позволяет. Раньше с этим были проблемы. |
|
26.08.2005, 00:06 | #10 |
Участник
|
Спасибо.
|
|
03.03.2006, 11:22 | #11 |
NavAx
|
Захотелось дополнить (может не заметил в ветке).
ИМХО, RLS работает только при наличи доступа к таблицам для которых он настраивается у той же группы пользователей. Бывает что для одной группы пользователей настраивется RLS, а в другой группе дан доступ к таблице (но RLS не используется), при такой ситуации иногда RLS не работают. Лучше RLS и доступ к таблицам участвующим в RLS делать в одной группе пользователей. |
|
31.05.2006, 23:54 | #12 |
Участник
|
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 |
Участник
|
Цитата:
Описание приведено для AX 4.0. 1) Создаем две группы пользователей например Group и rLocation. - Group - Определяем необходимые права для данной группы пользователей, но нужно обязательно отключить доступ ("Нет доступа") в данной группе для InventDim (Права доступа - Контроль доступа - Основной - Таблицы - Складские аналитики). Если пользователь будет включен в несколько групп кроме Group и rLocation, в них тоже необходимо отключить доступ к таблице InventDim. - rLocation - Данная группа будет использоваться для настройки RLS. В ней определяются права доступа только на InventDim (Права доступа - Контроль доступа - Основной - Таблицы - Складские аналитики). Все остальное имеет значение "Нет доступа". 2) После настройки вышеуказанного, перейдем непосредственно к настройке RLS по складу. Открываем форму "Безопасность на уровне записей", создаем новую строку, откроется мастер, нажимаем кнопку "Вперед". Указываем нашу группу rLocation и нажимаем кнопку "Вперед", выбираем "Показать все таблицы" и выбираем "Основной" - "Складские аналитики", нажимаем кнопку "Вперед" и "Готово". Затем в форме "Безопасность на уровне записей" становимся на созданную строку и нажимаем кнопку "Запрос". В открывшейся форме в поле "Поле" меняем значение на "Склад" и в поле "Критерии" выбираем нужный склад. 3) Добавляем пользователей в данные группы. Во всех формах и таблицах, в которых содержиться поле InventDimId будут отображаться только те записи которые соответствуют складу выбранному в поле "Критерии". |
|