Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.29;
Скачать: CL | DM;

Вниз

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)

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



Страницы: 1 вся ветка

Текущий архив: 2002.04.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
7-94576
Great
2002-01-26 22:03
2002.04.29
Программа блокирует Shutdown,Restart и Logoff в Win XP


14-94548
Suntechnic
2002-03-23 05:12
2002.04.29
SoftIce & Windows XP...


3-94302
pls
2002-04-08 11:22
2002.04.29
DLL или BPL?


3-94260
kosty
2002-04-07 20:34
2002.04.29
база данных


1-94520
kopachev
2002-04-15 19:48
2002.04.29
Создание превью как в отчетах