Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Роли пользователей 
:(
    Опции темы
santilaas
Дата 27.1.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 322
Регистрация: 28.8.2005
Где: Блага

Репутация: нет
Всего: нет



Привет всем!
1) Имеется БД (Firebird 1.5.1), в клиентском приложении на форме подключения клиент должен указать (выбрать из списка) роль.
Вопрос: как до подключения к БД заполнить этот выпадающий список всеми реально имеющимися в БД ролями (притом на русском языке). Первая мысль приходящая в голову - создать какой-нибудь ini или текстовый файл, где построчно писать через разделитель название роли и её английский эквивалент. Может у кого-нибудь будут другие мысли на сей счет.?
2) Может кто-нибудь знает, как при подключении к БД (на форме указывается логин, пароль и из списка выбирается роль) проверять назначена ли данному пользователю данная роль. Притом, как я думаю - до фактического подключения к БД проверить это нельзя. Но тогда, получается любой пользователь может зайти скажем под ролью "Администратор" - и хоть он ничего не сможет изменить, но сам факт остается фактом - подключится он с ролью администратор?! - а если у меня в зависимости от выбранной роли устанавливается определенный интерфейс?!.
В общем я делаю так - сразу после подключения к БД под опред. логином и паролем выполняется такой код: 
Код

   //проверяем, есть ли права у пользователя на использование данной роли
   zapros:= 'select count (a.RDB$RELATION_NAME) from RDB$USER_PRIVILEGES a, RDB$ROLES b where  (a.RDB$RELATION_NAME = b.RDB$ROLE_NAME) and (RDB$USER = ''' + UpperCase(DM.DB.ConnectParams.UserName) + ''') and (RDB$ROLE_NAME = ''' + UpperCase(DM.DB.ConnectParams.RoleName) + ''')';
  role:= StrToInt(DM.DB.QueryValueAsStr(zapros,0));
  if (role <> 0) then
     //здесь выполняется какой-то код
  else
     //сообщение о том, что пользователь не может указывать данную роль
     DM.DB.Close;

- но при таком раскладе - я сначала подключаюсь, затем проверяю роль, - если пользователю не дана данная роль, тогда отключаемся от БД, иначе снова подключаемся. Но что-то мне не нравится - базу постоянно дергать. Кто, что посоветует, расскажет или свой код приведет??? 
3) Другими словами намутили в Firebird-е c ролями - рад буду, если ошибаюсь - но трудности остаются
Заранее благодарен.


--------------------
[
PM MAIL   Вверх
Bose
Дата 28.1.2007, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



У меня в проекте сделано так: 
1) Пользователь по умолчанию подключается под стандартной ролью "SimpleUser" 
2) После этого из базы считывается присвоенная ему роль, и происходит переподключение уже с ролью присвоенной ему.

Как вариант могу посоветовать сделать аналогично:
1) сначала подключить пользователя со стандартной ролью. Может быть даже сделать какого-нибудь стандартного пользователя, который будет иметь право только просматривать список ролей, и считывать этот список ещё до показа диалога Login.
2) Когда пользователь введёт свой логин, заполнить список доступных ему ролей.
3) Подключить пользователя с присвоенной ему/выбранной им ролью.

А вообще у меня в проекте реализован свой механизм ролей, который дополняет/извращает стандартные роли Firebirda. В основу положен такой принцип: каждый пользователь может иметь несколько ролей(!). Соответственно, в базе есть таблица где прописано какие роли какому пользователю присвоены. Ну а собственно сам контроль, что можно и что нельзя реализован в приложении и в процедурах базы данных. Но у этого подхода есть один абсолютный минус: он черезвычайно негибкий. smile Но так уж исторически сложилось.

Совет на тему подключения.
Лично мне кажутся неудобными программы которые не показывают главную форму, пока не залогинишься. Минус в том, что нельзя посмотреть Help, нельзя посмотреть версию программы(!), которая как правило видна в окне About. Ну и сложно вообще понять что за программу ты запустил.

PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.