18.01.2005, 13:30 | #1 |
Участник
|
Права доступа на уровне записей
Нужно реализовать такую настройку прав доступа: есть таблица заказов и каждый пользователь видет в ней только те записи, что сам и создал. Некоторые пользователи видят все записи. Как проще всего реализовать данную схему.
|
|
18.01.2005, 14:06 | #2 |
Участник
|
Создать группы пользователей = количеству пользователей и для каждой группы (фактически для каждого пользователя) настроить права доступа на уровне записей.
|
|
18.01.2005, 14:07 | #3 |
Участник
|
Можно попробовать настроить RLS для поля createdBy.
Но 1) Настраивать придется для каждого пользователя 2) Не факт что это поле доступно для RLS 3) Не все таблицы имеют это поле (атрибут createdby) Вариант 2 (для маньяков программеров): можно создать в таблице поле, куда при создании записывается код группы пользователя и настраивать по нему |
|
18.01.2005, 14:12 | #4 |
Участник
|
Это я уже понял.
А есть ли возможность в аксапте в запросной форме в качестве критерия функцию подставить? Типа взять поле createdby а в качестве критерия curuserid() ? |
|
18.01.2005, 14:19 | #5 |
Участник
|
нет
|
|
18.01.2005, 14:34 | #6 |
Administrator
|
Цитата:
Изначально опубликовано Hamster
Вариант 2 (для маньяков программеров): 2tischenko: В данном случае лучше, видимо, не заморачиваться с RLS. Добавьте отдельный параметр в модуле "Расчеты с клиентами", чтобы указывать группу пользователей, которым доступны все заказы. В init() DataSource SalesTable добавьте в query скрытый Range. PHP код:
__________________
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 |
Участник
|
Цитата:
Изначально опубликовано Hamster
Вариант 2 (для маньяков программеров): можно создать в таблице поле, куда при создании записывается код группы пользователя и настраивать по нему Но для этого сотрудник должен быть указан в таблице сотрудников (для каждого сотрудника, который создает заказ, должно быть заполненое поле Пользователь (вкладка Разное) - идентификатор пользователя системы).
__________________
С уважением, rus_stas |
|
18.01.2005, 14:38 | #8 |
Участник
|
Невнимательно читал пост.... пропустил что это "заказы"
P.S А теперь, когда вы все настроили, злобный юзер Петров взял и сменил SalesTaker на Иванова...... |
|
18.01.2005, 14:47 | #9 |
Administrator
|
Цитата:
Изначально опубликовано 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 |
|
18.01.2005, 15:35 | #11 |
Участник
|
Спасибо это помогло
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 |
Участник
|
Цитата:
Изначально опубликовано tischenko
Спасибо это помогло здесь известные проблемы подобного подхода http://axapta.mazzy.ru/works/accessrecord/#knownproblem |
|
18.01.2005, 15:42 | #13 |
Administrator
|
Ни в коем случае так не делайте. Вы создаете 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 |
Administrator
|
Цитата:
Изначально опубликовано mazzy
не обольщайтесь здесь известные проблемы подобного подхода http://axapta.mazzy.ru/works/accessrecord/#knownproblem
__________________
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 |
Участник
|
Цитата:
Изначально опубликовано Maxim Gorbunov
А вот и нет. Такие проблемы возникнут только в том случае, если оставить для критерия RangeStatus::Open. Если ставить RangeStatus::Hidden или RangeStatus::Locked, пользователь не сможет добавить фильтры по тому же самому полю. Соответственно, описанной проблемы не возникнет. Спасибо тебе, добрый фей. |
|
18.01.2005, 16:28 | #16 |
----------------
|
Цитата:
Изначально опубликовано mazzy
Оба на! Здорово. И это поправили в 3.0... Спасибо тебе, добрый фей. В "ограниченном" поле сделайте поиск записи "значение1, значение2". А теперь откройте фильтр... -------- Забыл важный момент - искать надо 2 раза |
|
|
За это сообщение автора поблагодарили: mazzy (17). |
18.01.2005, 17:23 | #17 |
Участник
|
Цитата:
Изначально опубликовано Wamr
Не обольщайтесь! Черт, ну почему так, а?! |
|
18.01.2005, 17:29 | #18 |
Administrator
|
Wamr, спасибо за Ваш ответ! Давно не испытывал такого азарта, при поиске решения.
Действительно, против лома нет приема Как известно, у поговорки еще и окончание есть Вот небольшая модификация класса SysSetupFormRun (немного изменен метод task()). После импорта этого проекта, поиск по полям, входящим в Locked или Hidden диапазоны, осуществляться не будет (будет заблокирован для этих полей).
__________________
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 |
Участник
|
Перенесу-ка я в проекты.
Спасибо огромное. |
|
18.01.2005, 17:48 | #20 |
Administrator
|
Как обычно сделал, а потом подумал
Если настраивать фильтрацию по значению некоторого поля, стоит это поле от пользователя закрыть (как минимум, запретить его изменение, иначе не избежать ситуации, когда запись показывалась, а после того, как кто-то ее подредактировал - проала). Если от пользователя скрыть поле полностью, то и поиск по нему он сделать не сможет. Таким образом, первоначальная задача (фильтрация списка заказов) была бы полностью решена, если в 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 |
|