Форум: "Базы";
Текущий архив: 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)
Т.о. пользователь управляет видимостью только доступных ему колонок.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c