19.07.2005, 15:42 | #21 |
Участник
|
2 itfs :
Пардон ,Со случаем <Перейти к основной таблице> -конфуз . . Он работает , просто я начал проверять на себе , не указав в настроечной таблице ничего. |
|
19.07.2005, 17:11 | #22 |
Участник
|
Ну да, тут вопрос только в том, в какой форме окажешься ....
С уважением, itfs. |
|
19.07.2005, 17:34 | #23 |
Участник
|
Цитата:
Изначально опубликовано Pustik
Побывал на вашей ссылке. Неплохо бы было сделать lookup для списка полей принадлежащих соответствующей таблице в вашей настроечной форме . Было сделано очень давно... развивать и модифицировать не планирую. |
|
22.07.2005, 10:46 | #24 |
Участник
|
to ALL
В заключении темы хочу предоставить отчет о том, что у нас получилось. Я просто перечислю что мы смогли сделать , что нет . Для сравнения возьму проект Mazzy на его ссылке. Изначально методология у нас была идентичной, только конечно грамотность написания кода у нас на порядок ниже ). Мастер есть мастер. Но тем не менее есть и преимущества и недостатки. Может быть эта информация поможет кому – нибудь. Преимущества : 1) В своем статическом методе настройки фильтра мы используем изменение не только Query(), но и QueryRun().Query(), что позволяет нам закрыть дырки для пользователей, используя функцию <Найти>. В проекте Mazzy пользователь все-таки может обойти даже заблокированные фильтры. Тема <работа Range на форме>. 2) В этом же методе Mazzy использует запрос вида : while select accessRecordList join userGroupList where userGroupList.userId = = userID && ( userGroupList.groupId = = accessRecordList.groupID || userGroupList.userId = = accessRecordList.userID ) join TmpSysQuery where accessRecordList refTableID == tmpSysQuery.Table_Id {…………..уст-ка фильтра………….} Мы все-таки посчитали, что это не совсем корректно, ведь получается, сколько раз UserId встречается в таблице userGroupList, - столько раз и установится этот фильтр. Конечно фильтры “!A” и “!A,!A,!A,!A” ,будут возвращать один и тот же результат , но согласитесь…… У нас все гораздо проще: while select accessRecordList where accessRecordList.userId = = userID && !accessRecordList.GroupId {…………..уст-ка фильтра………….} 3) Разделение SQL – запроса , о котором говорилось выше, на два (для пользователей и групп пользователей), позволило нам более понятно, динамично и рационально настраивать фильтры в нашей настроечной форме. А именно: while select userGroupList where usergrouplist.userId = = UserId { while select forceplaceholders accessRecordList where accessRecordList.GroupId = = userGrouplist.groupId && !accessRecordList.UserId {…………..уст-ка фильтра………….}} – для групп пользователей while select accessRecordList where accessRecordList.userId = = userID && !accessRecordList.GroupId {…………..уст-ка фильтра………….} – для пользователей Например: пользователь Иванов относится к группе ‘Технолог‘ Задача1: группа ‘Технолог’ видит: A,B,C,D польз. Иванов видит: только A и наоборот Задача2: группа ‘Технолог’ видит: A А вот польз. Иванов видит: A,B,C,D У нас обе Задачи легко настраиваются, а главное настройка очень понятна самому настройщику. Пытался настроить Задачу2 в проекте Mazzy -- честно говоря, так и не удалось. Недостатки : 1) Для того, что бы использовать изменение QueryRun().Query() , нам пришлось передавать параметр FormDataSource. Это конечно не так динамично как у Mazzy. Т.е. нам приходиться в каждой форме, где необходимо устанавливать фильтр прописывать строку(например для справочника номенклатуры) : MY_RLS::updateQuery(InventTable_ds); в то время как у Mazzy : AccessRecordList_maz::updateQuery(this.query()); Таким образом, наш код в ядро не пропишешь. 2) Еще один большой недостаток. Предположим на какое-то поле нужно наложить фильтр типа A,B,C,D. В нашем случае по этому полю не будет работать поиск. Т.е. если пользователь захочет отфильтровать записи по этому полю только для A, он все равно получит A,B,C,D, - но никогда пользователь не увидит Е,F.. и т.д.. У Mazzy это сделать можно, но и найти E,F для пользователя не составит большого труда. Как сделать идеально, мы так и не придумали. Но главное для нас что бы пользователь не смог видеть то , что ему не положено , а искать можно и по другим полям , или на худой конец , пользоваться услугами сортировки. Может быть я в чем то не прав , это только моя точка зрения , правда подкрепленная тестированием. Буду рад, если эта информация кому-нибудь поможет. |
|
22.07.2005, 12:23 | #25 |
Участник
|
Кстати об RLS...
а никто не добавлял в список таблиц, которые он видит бругие таблицы, а не только группы Main как сделано сейчас? |
|
22.07.2005, 13:39 | #26 |
Участник
|
Цитата:
Изначально опубликовано Pustik
Буду рад, если эта информация кому-нибудь поможет. |
|
23.07.2005, 07:41 | #27 |
Участник
|
если это кого-то заинтересовало могу выслать проект- что у нас получилось,я буду очень рад если услышу ваши замечания
|
|
24.07.2005, 06:36 | #28 |
Участник
|
Давайте лучше рядом со статьей положим?
Тогда все смогут брать, а на форуме оставлять комментарии. |
|
25.07.2005, 08:30 | #29 |
Участник
|
!
|
|
|
|