Вступление
Итак, выкроил я время и начал разработку софтины (естественно GPL) на базе, которой можно будет строить полезные приложения. По моему разумению оно должно будет взять на себя обобщающие функции: руление пользователями, увязка в единый интерфейс. Делаю с использованием QT. И в частности планирую использовать QPluginLoader. Т.е. все будет подключатся в виде плагинов. Практически обязательные плагины: информационный и БД. Информционный: это всякая вспомогательная трехомудия типа сплешэкрана, общей иконки и заголовка приложения, окна "О программе"... Чтобы ээто все можно было подменять "на лету". Втрой это БД. Который будет по умолчанию поддеривает все СУБД которые позволяет QT. Соответственно при желани этот плагин легко заменить на свой работающий, например, с файлами собственного формата. Вероятно в этот плагин добавлю форму для работы с SQL запросами.
Остальные плагины будут складироваться в определенную папку. Далее при загрузке общая система будет вызывать определенные методы каждого загружаемого плагина, для добавления нужных (данному плагину) пунктов общего меню. Кроме того это "общая" программа будет предоставлять окно выбора/подключения баз данных.
Соответственно можно добавить плагин позволяющий работать со скриптами..... Причем кому какой нравится...
Разграничение прав доступа задумал осуществить примерно следующим образом. Естественно права доступа к данным в БД, разграничиваются самой СУБД. Будет лишь одна специальная таблица соответствия имен пользователей БД, и имен пользователей программы. Т.к. в БД врят ли стоит совать имена с русскими символами, в то время как для программы это необходимо.
При добавлении новой БД будет указываться ограниченный пользователь, который может лишь читать таблицу пользователй (для вывода их списка). Ну а дальше при подключении выводится форма логина....
Но возник вопрос
как лучше реализовать настройку интерфейса в зависимости от залогиненого пользователя?
Раньше я работал только со следующей системой. Все пункты интерфейса находились в определенной таблице. И были указаны какие пользователи/группы могут его использовать и соответсвенно при логине делаем "селект из этой таблицы где залогиненомупользователью можно" и строим интерфес. Но то была сельная прога. Здесь плагины....... Заранее не известные.
Пока идея такая. При первой загрузке плагина регистрируем его в базе, присваиваем id. Регистрируем все его "пункты" и присваиваем им id. И проставляем права доступа...
А вот что потом.... Скорее всего передавать в плагин id ники пкнутов которые разрешены, что бы при их добавлении происходила фильтрация.....
Но, что то мне этот метод не очень нравится.... (пока еще не сделал - пока обдумываю) может кто предложит идею.
Как эффективнее реализовать права доступа (интерфейс) (по следам обсуждения о не хватке программ для бизнеса)
Модератор: Модераторы разделов
-
Voral
- Сообщения: 1205
- ОС: Debian Wheezy (amd64)
Как эффективнее реализовать права доступа (интерфейс)
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: Как эффективнее реализовать права доступа (интерфейс)
В web-е я реализую это через проверку определёной cookie, фактически меню строится на if-else.
-
RasenHerz
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: Как эффективнее реализовать права доступа (интерфейс)
как лучше реализовать настройку интерфейса в зависимости от залогиненого пользователя?
Первое что пришло на ум - реализовать для каждой группы, в которой может участвовать пользователь, плагин (компилируемый или же QtScript) и возложить все необходимые действия на него. Единственное что останется сделать программе - при логине юзера получить группы в которых он участвует и загрузить соответствующие плагины. Ну о методах предотвращения загрузки нежелательных плагинов можно будет позаботиться чуть позже.