powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проверка прав пользователя при входе в БД
12 сообщений из 12, страница 1 из 1
Проверка прав пользователя при входе в БД
    #38386996
PunK_HS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Необходимо реализовать проверку прав пользователя при входе в БД.
Есть 3 таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE USERS (
    ID     D_TPKEY /* D_TPKEY = INTEGER NOT NULL */,
    LOGIN  D_CHAR30 /* D_CHAR30 = VARCHAR(30) */,
    PASS   HASH /* HASH = VARCHAR(200) */,
    FIO    D_CHAR50 /* D_CHAR50 = VARCHAR(50) */,
    FLAG   D_BOOL2 DEFAULT 0 /* D_BOOL2 = SMALLINT */
)


Код: sql
1.
2.
3.
4.
CREATE TABLE GROUPS (
    ID    D_TPKEY /* D_TPKEY = INTEGER NOT NULL */,
    NAME  D_CHAR30 /* D_CHAR30 = VARCHAR(30) */
);


Код: sql
1.
2.
3.
4.
CREATE TABLE USER_GROUPS (
    ID_USER   D_TFKEY /* D_TFKEY = INTEGER NOT NULL */,
    ID_GROUP  D_TPKEY /* D_TPKEY = INTEGER NOT NULL */
);


При запуске приложения Delhi есть форма авторизации. После успешной авторизации запускается главное окно программы. В этом окне необходимо ограничить видимость(/доступность) некоторых компонентов в зависимости от группы пользователя.
Для получения списка групп использую следующий код:
Код: sql
1.
2.
3.
SELECT ug.id_group
FROM user_groups ug
WHERE ug.id_user = :CURRENT_USER


Подскажите, как организовать проверку на видимость(/доступность) на форме Delphi.
P.S. FireBird 2.0
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387007
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, PunK_HS!
You wrote on 4 сентября 2013 г. 17:06:58:

PunK_HS> Подскажите, как организовать проверку
> на видимость(/доступность) на форме Delphi.
тут программист нужен


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387020
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PunK_HS,

Обьедини выборку из 2 таблиц.
В Query.SQL.Text вбей:
Код: plsql
1.
2.
3.
4.
5.
select users.login,groups.name,groups.id as USERGROUPID
from users
join user_group on (user_group.id_user=users.id)
join groups on (groups.id=user_group.id_group)
where users.login=current_user


Выполни запрос и проверь:
Код: pascal
1.
2.
  if (Query.FieldByName('USERGROUPID').AsInteger=AvailGroupID)  then // тут я показываю элементы
  else  // а тут я элементы скрываю
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387125
Kotъ-Begemotъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
Button1.Visible := (Query.FieldByName('USERGROUPID').AsInteger=AvailGroupID);
Edit2.Enabled := (Query.FieldByName('USERGROUPID').AsInteger=AvailGroupID);
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387158
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PunK_HS
Код: sql
1.
2.
3.
4.
CREATE TABLE USER_GROUPS (
    ID_USER   D_TFKEY /* D_TFKEY = INTEGER NOT NULL */,
    ID_GROUP  D_TPKEY /* D_TPKEY = INTEGER NOT NULL */
);


Код: sql
1.
2.
3.
SELECT ug.id_group
FROM user_groups ug
WHERE ug.id_user = :CURRENT_USER


Подскажите, как организовать проверку на видимость(/доступность) на форме Delphi.
P.S. FireBird 2.0

Эх. Понапихать домены в таблицы мы уже смогли, а вот уяснить для себя что CURRENT_USER это не INTEGER - уже не могем. Пичалька.
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387315
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

+1

и еще плюс
http://www.ibase.ru/devinfo/treedb2.htm
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387451
PunK_HS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster,
Спасибо за Ваши советы!

DarkMasterЭх. Понапихать домены в таблицы мы уже смогли, а вот уяснить для себя что CURRENT_USER это не INTEGER - уже не могем. Пичалька.
а если при автроризации пользователя:
Код: pascal
1.
current_user := ds_users.FieldByName('ID').AsInteger;
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387496
PunK_HS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне кажется я непонятно описал ситуацию. Дело в том, что в результате выполнения запроса
Код: sql
1.
2.
3.
SELECT ug.id_group
FROM user_groups ug
WHERE ug.id_user = :CURRENT_USER

Я получаю список групп, в которых состоит пользователь. Для разных групп предполагаются разные права на просмотр/использование компонентов формы. Допустим пользователь состоит в группах Администратор и Кладовщик. Если с помощью этого кода
Код: pascal
1.
2.
if (Query.FieldByName('USERGROUPID').AsInteger=AvailGroupID)  then // тут я показываю элементы
  else  // а тут я элементы скрываю

я проверяю сначала группу с более высокими привилегиями, а затем группу с более низкими, то пользователь получит права последней проверенной группы, или я не прав?
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387505
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PunK_HS,

Мне кажется здесь правильно всё таки права определять через роли. Пользователю должен входить в только одну группу. А вот уже к каждой группе должен относится набор ролей.
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387614
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot PunK_HSЯ получаю список групп, в которых состоит пользователь. Для разных групп предполагаются разные права на просмотр/использование компонентов формы. Допустим пользователь состоит в группах Администратор и Кладовщик.
......
я проверяю сначала группу с более высокими привилегиями, а затем группу с более низкими, то пользователь получит права последней проверенной группы, или я не прав?[/quot]

1) Не получаешь. Ты свой запрос пробовал выполнить?

2) Где в структуре таблиц, приведенной тобой, поле, которое указывает на привилегии группы? Более высокие низкие привилегии легко определяются с помощью

Код: plsql
1.
SELECT FIRST 1 ... ORDER BY .... ASC/DESC;



И наконец:

3) Если пользователь "сидит" в нескольких группах - нужны дополнительные параметры при авторизации, иначе получается угадайка для пользователя, с какими привилегиями он должен зайти. Т.е. я как пользователь, ввожу логин/пароль - как ты угадаешь, что я хочу стать админом, а не Кладовщиком? - тебе нужно еще давать возможность выбора группы, и тогда все твои ухищрения по поводу
определения принадлежности пользователя группе идут лесом за ненужностью.
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387626
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PunK_HS
Код: sql
1.
2.
3.
SELECT ug.id_group
FROM user_groups ug
WHERE ug.id_user = :CURRENT_USER



Я бы параметр CURRENT_USER на CURRENT_USER_ID переименовал во избежании. В FB уже есть такая встроенная контекстная переменная, поэтому написанное вносит путаницу.
...
Рейтинг: 0 / 0
Проверка прав пользователя при входе в БД
    #38387640
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Кстати да... Вчера вечером как-то не обратил внимание. Ну в общем ТС это вроде как уже и не нужно ;)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проверка прав пользователя при входе в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]