Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Вниз

DBgrid - подходы к сохранению настроек грида 


kserg@ukr.net   (2002-04-08 19:08) [0]

Народ, кто решал подобную задачу с DBgrid-om:
с одной стороны надо юзеру дать свободу в настройке грида (порядок колонок, их ширина, скрыть/отобразить колонку),
а с др. стороны - требование нач-ва, чтобы любому юзеру можно было ограничить доступ к инфо в БД.
Я решаю след.образом - создал служеб.таблицу, в котр. каждому юзеру прописаны права на просмотр полей. Соот-но, если к полю нет доступа, то при загрузке приложения в DBgrid-e эти колонки
делаю невидимыми.
Настройки DBgrid-а сохраняю/загружаю через DBgrid.SaveToFile/ LoadFromFile.
Всё было классно, пока однажды нач-к решил добавить одному юзеру правов на просмотр полей. Но в настройках грида эти поля были невидимыми, и юзер так и не смог их открыть...

Народ,пожалуйста подскажите красивое решение, а то уже мозги "пухнут".



Yuvich   (2002-04-08 20:22) [1]

Решение правильное, но надо сделать интерфейс к твоей служебной таблице чтобы менять права на просмотр полей каждым пользователем.



dymka   (2002-04-08 21:48) [2]

Можно настройки грида хранить в базе - тогда и сам юзер с любого компа увидит то что должен увидеть. И естесственно управление доступностью можно управлять уже централизованно.



kserg@ukr.net   (2002-04-09 10:25) [3]

2Yuvich © (08.04.02 20:22)
спасибо, приятно осознавать, когда еще чё-то могу придумать.

Такую прогу админа БД я уже сделал.
В ней завожу юзеров, прописываю им права доступа к инфо(полям).

Так вот, саму реализацию принципа "вижу-невижу" инфо у юзера я заложил в грид (а что ж ещё использовать?) через пару его св-в DBgrid.Colums[i].Visible и DBgrid.Colums[i].Tag.
т.е. Tag=0 -поле невидимо(соот-но Visible=false)
/=1 -доступно (Visible=true)
/=2 -редак-ние (Visible=true)

В случае если юзеру поле доступно(видимо), то он может его скрыть/отобразить (это сделано для того, чтобы любой юзер мог отображать у себя в гриде только нужную ему инфо, а не все поля таблицы - подход вполне здравый).
Но в такой схеме мне не нравиться след: получается существуют 2 места, где определяется набор видимых полей - в таблице, где админом формально прописаны права на поля, и в файле-настройках гриде, куда юзер сохраняет установки колонок грида после его настройки.
Но т.к. админ может изменить юзеру права, получается после загрузки юзерского приложения необходимо проверять установки колонок грида с правами на эти поля в таблице (а не изменились ли они?).
Вот этот "кривой" ход мне очень и не нравиться :-(


Ну, какие ещё будут мысли?



Johnmen   (2002-04-09 10:36) [4]

А мысль простая : если по сути от 2 челов зависят настройки, то необходимо определиться, а кто же из них "главней", а второй должен под "главного" подстроиться...



Lusha   (2002-04-09 10:45) [5]

>kserg@ukr.net
Судя по принципу определения доступности колонки в гриде Вы систему безопасности сервера не задействовали? Или я что то не так понял?



kserg@ukr.net   (2002-04-09 10:51) [6]

2Lusha © (09.04.02 10:45)
Точно...
>систему безопасности сервера
Намекаешь на ГРАНТЫ?



Lusha   (2002-04-09 10:57) [7]

Намекаю? Кричу в полный рост... Тогда синхронизацию доступа с настройками пользователя достаточно будет производить банальным анализом списка полей какой-нибудь Table и сохраненными настройками грида для конкретного пользователя. Причем настройки грида можно будет хранить в реестре Windows - чай, не секретная информация...



{bas}   (2002-04-09 12:19) [8]

Можно еще так.
Что бы меньше менять в твоей концепции, предлагаю сделать таблицу, где будут хранится последнии изменения(или еще как-то), при входе юзер лезет в эту таблицу и смотрит, есть ли изменеия в структуре(поля добавились??), и предлагает этому узеру добавить поля в такой-то форме в таком-то гриде, а около этого грида(вообще у всех гридов есть эта кнопка) есть кнопка типа рефрешь поля(ну прям как в Query.Fields в Delphi в дезайн тайм), а если не добавил то это его проблемы.
Или еще вариант - если есть изменеия в структуре(та-же самая таблица при входе), то стирать тот файл в котором хронились настройки, а юзеру говорить - "дорогой поправь настройки того-то грид"



Yuvich   (2002-04-09 13:34) [9]

>kserg@ukr.net
Я делаю так:
Есть таблица с перечнем колонок грида и признаком "доступен-недоступен". При этом перечень колонок грида полностью соответствует перечню полей в DataSet"е, которые вообще могут отображаться. Есть место, где пользователь хранит список настроек грида (я храню их в register Windows). Это, я так понял, у тебя уже есть.

При запуске формы пользователем, идет просмотр этой таблицы и все "недоступные" колонки удаляются (Columns[i].Free).
(Это делается в переопределенном конструкторе Create)

Далее идет чтение настроечной таблицы (файла) грида, где определяется "видимость-невидимость" колонок. Тут уже нет никаких беспокойств, т.к. колонки грида - все доступны, другое дело видны или не видны.
(Это делается по событию OnShow или OnActivate)

Т.о. пользователь управляет видимостью только доступных ему колонок.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.032 c
14-94551          Pat                   2002-03-21 17:02  2002.04.29  
Проверь свою реакцию


1-94465           Reticent              2002-04-16 12:13  2002.04.29  
Подскажите


1-94509           LazorenkoX            2002-04-16 18:19  2002.04.29  
dcu


1-94362           Aleksandr             2002-04-17 12:19  2002.04.29  
Как сделать, чтобы Делфи нормально ставила курсор на коде?


3-94257           valievrf              2002-04-07 17:02  2002.04.29  
Обсуждение рендома и фора.....