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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.01.2005, 13:30   #1  
tischenko is offline
tischenko
Участник
 
35 / 10 (1) +
Регистрация: 12.01.2005
Адрес: Киев
Права доступа на уровне записей
Нужно реализовать такую настройку прав доступа: есть таблица заказов и каждый пользователь видет в ней только те записи, что сам и создал. Некоторые пользователи видят все записи. Как проще всего реализовать данную схему.
Старый 18.01.2005, 14:06   #2  
YellowSubmarine is offline
YellowSubmarine
Участник
 
111 / 12 (1) ++
Регистрация: 18.12.2002
Создать группы пользователей = количеству пользователей и для каждой группы (фактически для каждого пользователя) настроить права доступа на уровне записей.
Старый 18.01.2005, 14:07   #3  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
Можно попробовать настроить RLS для поля createdBy.

Но
1) Настраивать придется для каждого пользователя
2) Не факт что это поле доступно для RLS
3) Не все таблицы имеют это поле (атрибут createdby)

Вариант 2 (для маньяков программеров):
можно создать в таблице поле, куда при создании записывается код группы пользователя и настраивать по нему
Старый 18.01.2005, 14:12   #4  
tischenko is offline
tischenko
Участник
 
35 / 10 (1) +
Регистрация: 12.01.2005
Адрес: Киев
Это я уже понял.

А есть ли возможность в аксапте в запросной форме в качестве критерия функцию подставить? Типа взять поле createdby а в качестве критерия curuserid() ?
Старый 18.01.2005, 14:19   #5  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
нет
Старый 18.01.2005, 14:34   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Hamster
Вариант 2 (для маньяков программеров):
Вообще-то, есть поле SalesTable.SalesTaker. Скорее всего, оно вполне удовлетворит требованиям.

2tischenko: В данном случае лучше, видимо, не заморачиваться с RLS. Добавьте отдельный параметр в модуле "Расчеты с клиентами", чтобы указывать группу пользователей, которым доступны все заказы. В init() DataSource SalesTable добавьте в query скрытый Range.
PHP код:
if (!UserInfoHelp::userInUserGroup(curUserId(), mySuperuserGroup)) {
    
queryBuildRange this.query()
        .
dataSourceTable(tableNum(SalesTable)
        .
addRange(fieldNum(SalesTableSalesTaker)); // или createdBy
    
queryBuildRange.value(curUserId());
    
queryBuildRange.status(RangeStatus::Hidden);

__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 18.01.2005, 14:35   #7  
rus_stas is offline
rus_stas
Участник
 
50 / 19 (1) ++
Регистрация: 06.09.2004
Адрес: Киев
Цитата:
Изначально опубликовано Hamster
Вариант 2 (для маньяков программеров):
можно создать в таблице поле, куда при создании записывается код группы пользователя и настраивать по нему
Зачем программировать, если можно использовать поле Получатель (вкладка Настройки шапки заказа) и по этому полю настроить RLS.

Но для этого сотрудник должен быть указан в таблице сотрудников (для каждого сотрудника, который создает заказ, должно быть заполненое поле Пользователь (вкладка Разное) - идентификатор пользователя системы).
__________________
С уважением,
rus_stas
Старый 18.01.2005, 14:38   #8  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
Talking
Невнимательно читал пост.... пропустил что это "заказы"


P.S
А теперь, когда вы все настроили, злобный юзер Петров взял и сменил SalesTaker на Иванова......

Старый 18.01.2005, 14:47   #9  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Hamster
А теперь, когда вы все настроили, злобный юзер Петров взял и сменил SalesTaker на Иванова......
А для этого есть настройка прав доступа на поля таблицы.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 18.01.2005, 14:51   #10  
rus_stas is offline
rus_stas
Участник
 
50 / 19 (1) ++
Регистрация: 06.09.2004
Адрес: Киев
А Максим меня всегда опережает с ответом
__________________
С уважением,
rus_stas
Старый 18.01.2005, 15:35   #11  
tischenko is offline
tischenko
Участник
 
35 / 10 (1) +
Регистрация: 12.01.2005
Адрес: Киев
Спасибо это помогло

if (UserInfoHelp::userInUserGroup(curUserId(), 'aaaa'))
{
q1 = new query();
qbr = q1.addDataSource(tableNum(SalesTable)).addRange(fieldNum(SalesTable, createdBy));
qbr.value(curUserId());
qbr.status(RangeStatus::Hidden);
this.query(q1);
}

На самом деле нужно было чтобы пользователи определнной группы с ограниченными и так правами видели только свои записи, а остальные группы все записи.

Спасибо за внимание
Старый 18.01.2005, 15:40   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано tischenko
Спасибо это помогло
не обольщайтесь
здесь известные проблемы подобного подхода
http://axapta.mazzy.ru/works/accessrecord/#knownproblem
Старый 18.01.2005, 15:42   #13  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Ни в коем случае так не делайте. Вы создаете Query, затирая им стандартный. У вас не будет правильно работать переход к основной таблице (к таблице "Заказы").

Обратите внимание на то, что в том коде, который я писал раньше, Query не создается заново. Модифицируется уже созданный query.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 18.01.2005, 15:47   #14  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано mazzy
не обольщайтесь
здесь известные проблемы подобного подхода
http://axapta.mazzy.ru/works/accessrecord/#knownproblem
А вот и нет. Такие проблемы возникнут только в том случае, если оставить для критерия RangeStatus::Open. Если ставить RangeStatus::Hidden или RangeStatus::Locked, пользователь не сможет добавить фильтры по тому же самому полю. Соответственно, описанной проблемы не возникнет.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 18.01.2005, 15:58   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Maxim Gorbunov
А вот и нет. Такие проблемы возникнут только в том случае, если оставить для критерия RangeStatus::Open. Если ставить RangeStatus::Hidden или RangeStatus::Locked, пользователь не сможет добавить фильтры по тому же самому полю. Соответственно, описанной проблемы не возникнет.
Оба на! Здорово. И это поправили в 3.0...

Спасибо тебе, добрый фей.
Старый 18.01.2005, 16:28   #16  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
Изначально опубликовано mazzy

Оба на! Здорово. И это поправили в 3.0...

Спасибо тебе, добрый фей.
Не обольщайтесь!
В "ограниченном" поле сделайте поиск записи "значение1, значение2". А теперь откройте фильтр...
--------
Забыл важный момент - искать надо 2 раза
За это сообщение автора поблагодарили: mazzy (17).
Старый 18.01.2005, 17:23   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Wamr
Не обольщайтесь!
И тебе, добрый фей, спасибо.

Черт, ну почему так, а?!
Старый 18.01.2005, 17:29   #18  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Wamr, спасибо за Ваш ответ! Давно не испытывал такого азарта, при поиске решения.

Действительно, против лома нет приема Как известно, у поговорки еще и окончание есть

Вот небольшая модификация класса SysSetupFormRun (немного изменен метод task()). После импорта этого проекта, поиск по полям, входящим в Locked или Hidden диапазоны, осуществляться не будет (будет заблокирован для этих полей).
Вложения
Тип файла: xpo syssetupformrun.xpo (2.9 Кб, 292 просмотров)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: mazzy (17).
Старый 18.01.2005, 17:36   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Перенесу-ка я в проекты.
Спасибо огромное.
Старый 18.01.2005, 17:48   #20  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Как обычно сделал, а потом подумал

Если настраивать фильтрацию по значению некоторого поля, стоит это поле от пользователя закрыть (как минимум, запретить его изменение, иначе не избежать ситуации, когда запись показывалась, а после того, как кто-то ее подредактировал - проала). Если от пользователя скрыть поле полностью, то и поиск по нему он сделать не сможет.

Таким образом, первоначальная задача (фильтрация списка заказов) была бы полностью решена, если в init'е кроме добавления нового range добавить еще и скрытие элементов дизайна, связанных с этим полем.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Теги
rls, axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
права доступа Himan DAX: Функционал 9 24.09.2010 16:52
Влияние настройки доступа на уровне записей longson DAX: Функционал 2 15.01.2008 21:29
Настройка прав доступа на уровне записей Pan DAX: Администрирование 19 12.11.2006 11:10
Настройка доступа на уровне записей ATimTim DAX: Функционал 1 30.11.2004 13:37
SQL запросы в контроле доступа на уровне записей SDA DAX: Программирование 2 15.10.2004 09:55

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

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

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