Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 72

Разграничение прав Delphi БД Access

11.06.2019, 23:07. Показов 2240. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот я добавил столбец role(роль) в таблицу "table_users" как сделать чтобы при входе он проверял если в столбце роль у этого пользователя стоит admin то доступно всё, а если user то некоторые кнопки и формы не доступны
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
procedure TForm13.Button1Click(Sender: TObject);
begin
ADOQuery.Close;
  ADOQuery.SQL.Text:='SELECT * FROM table_users WHERE login = :p_login AND password = :p_passw ';
  if (Edit1.Text <> '') and (Edit2.Text <> '' )  then
  begin
    ADOQuery.SQL.Text:='SELECT * FROM table_users WHERE (login = :p_login) AND (password = :p_passw)';
    ADOQuery.Parameters.ParamByName ('p_login').Value := Edit1.Text;
    ADOQuery.Parameters.ParamByName('p_passw').Value := Edit2.Text;
    try
      ADOQuery.Open;
    Except
      ShowMessage('Не удалось открыть таблицу пользователей');
      Exit;
    end;
    if ADOQuery.RecordCount > 0 
    then
    begin
      ShowMessage('Вход успешно выполнен');
      Form13.Visible := False;
      Form1.Visible := True;
    end
    else
    begin
      ShowMessage('Неправильный логин или пароль');
      Form13.Edit1.Text := '';
      Form13.Edit2.Text := '';
    end;
  end
  else
    ShowMessage('Пустые поля логина\пароля не допускаются');
  end;
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2019, 23:07
Ответы с готовыми решениями:

Сделать разграничение прав доступа к таблицам и кнопкам в проекте Delphi через данные из Access
Нужно сделать авторизацию в делфи, так что бы данные брались из таблиц MS Access, и не просто авторизацию но и еще разделение прав: мастера...

Разграничение прав в delphi
Как в делви сделать разграничение прав. Что бы было 2 пользователя 1 админ 2 USER У админа одни права

Разграничение прав, админ и юзер
Есть форма для регистрации, там 2 пользователя. Суть в том чтобы при авторизации администратора открывалась 1 форма а для юзера совершенно...

13
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
11.06.2019, 23:35
А из таблицы table_users можно узнать на какую именно таблицу распространяется роль admin ?
0
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 72
11.06.2019, 23:49  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
роль admin
у админа будет доступ ко всем таблицам, кнопкам и формам, а user я хочу маленько ущемить в некоторых формах и кнопках
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
12.06.2019, 00:05
Админ это тоже пользователь, но с максимальными правами, а права вы должны где-то задать.
У вас должна быть примерно такая связка.
Пользователи (Имя) -> Права(Пользователь,Таблица,Просмотр,Изме нение,Добавление,Удаление)
И если у нас есть пользователь Администратор, для которого нет ни одной записи в таблице Права, то такой пользователь обладает всеми правами. В ином случае смотрим какие у нас есть ограничения по таблице прав.
0
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 72
12.06.2019, 00:43  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
смотрим какие у нас есть ограничения по таблице прав.
я думаю вообще это реализовать как то так, что когда проверка логина и пароля происходит, если логин с паролем верный, то происходит проверка записи в столбце "role" если там написано "admin" то форма открывается всё ему видно и доступно, а если там указан "user" то прописать через сам код что например Form1.Visible:=False; и кнопки так же,чтоб они просто исчезли
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
12.06.2019, 01:30
Если у вас только 2 пользователя и для второго жесткие ограничения, то вам таблица прав, как и пользователей вообще не нужны. Авторизация пользователя даст вам информацию об этом с лихвой. Можно прямо к свойствам формы авторизации обращаться для проверки. Скажем у вас в главном меню есть пункт по которому можно открыть таблицу сотрудников и открыть ее имеет право только Администратор. Тогда сразу после логина вы пишете такой код:
Delphi
1
MainMenu1.Items.Find('Сотрудники').Enabled := frmLogin.Edit1.Text = 'Администратор';
и аналогично вы можете заблокировать доступ к любому элементу. Например если у вас в проекте есть форма, которая содержит кнопку на удаление записи, то делаем так-же:
Delphi
1
frmEditRecord.btnDelete.Enabled := frmLogin.Edit1.Text = 'Администратор';
Как вы уже наверное догадались, формам и элементам на них лучше сразу давать удобные для понимания имена.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
12.06.2019, 07:36
вот только на самом деле так делать не нужно
вы опять предлагаете хранить данные "на экране"
т.е. в frmLogin.edit1.text
неужто так трудно завести переменные, где хранить все свое добро, а форма, как элемент интерфейса - одноразовая
часто вы второй раз в программе логин вводите?
показали, данные у юзера забрали, и всё, уничтожьте.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
12.06.2019, 10:46
1. Я сторонник минимализма и абсолютно не вижу никакого криминала к обращению к свойствам формы после ее закрытия. Это такие-же переменные, ничем не хуже предлагаемых вами промежуточных. Вот это как-раз лишнее - гонять данные непонятно зачем.
2. Как раз форма логина нужна, ее уничтожать не надо. Смена пользователя это стандартная операция для которой перезапускать приложение неудобно.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
12.06.2019, 17:15
нет никакого криминала при обращении к форме после закрытия
есть криминал в хранении данных по формам
и в создании всех форм приложения просто так, чтобы там в едитах хранить чонить...
0
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 72
12.06.2019, 19:30  [ТС]
Цитата Сообщение от Пытливый Посмотреть сообщение
понимания имена
мне это не подходит потому что Адм будет 1, а пользователей больше
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
13.06.2019, 09:27
так и не понял, в чем вопрос

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
TUSERDATA=record
  LOGIN, PASSWORD, USER_ROLE:string;
end;
.....
var Userdata:TUserData;
.....
function CheckLogin(login,pass:string; var UserData:TUserData):bolean;
begin
  выбрать из таблицы Users данные о пользователе у которого логин=:login и пароль=:pass
  result := not query.eof;
  if result then 
    запоминаем значения полей в Userdata;
end;
.....
 
repeat
  if loginform.showmodal=mrok then
    if checkLogin(loginform.eLogin.text, loginform.ePass.text;) then
      break
    else
      showmessage('login/pass incorrect')
  else
    application.terminate;
until false;
Далее в процедуре под названием что-то типа SetupUI(Userdata);
в зависимости от значения поля USER_ROLE или как вы там его назовете (!! ROLE- это зарезервированное слово обычно)
гасим/зажигаем нужные элементы интерфейса
0
0 / 0 / 0
Регистрация: 26.10.2016
Сообщений: 72
13.06.2019, 21:24  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
так и не понял, в чем вопрос
в общем после сверки логина и пароля, если они верны, нужно сверить значение столбца из этой же таблицы где находятся login и password, если там admin то запускается программа, если там user то программа запускается(но при этом я хочу написать чтоб некоторые формы и кнопки были не доступны(отключить их видимость и всё)), можно ли как то доработать тот код ? строго не судите только начал в этом разбираться
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
14.06.2019, 08:39
ну так вот вы получили это значение из поля USER_ROLE и я написал вам кусок, в котором ответы на все вопросы
есть еще немного тут https://www.cyberforum.ru/blog... g4874.html
дальше все просто как мычание
Delphi
1
2
3
4
if UserData.Role='Admin' then
  showBossForm()
else
  showLokhForm();
или
Delphi
1
bigRedButton.enabled := UserData.Role='Admin';
0
14.06.2019, 08:47

Не по теме:

Цитата Сообщение от krapotkin Посмотреть сообщение
дальше все просто как мычание
о чем ему еще два дня назад сказали - не дошло, видимо, с первого раза...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.06.2019, 08:47
Помогаю со студенческими работами здесь

Как делается разграничение прав?
Объясните пожалуйста если в системе работают 2 пользователя и у каждого из них д.б. свои функции и возможности как вообще это делать? ...

Разграничение прав доступа пользователей
Добрый день, есть база в Аксесе где есть таблица Авторизация вней 2 пальзователя 1 Администратор 2 Пользователь Форма авторизации на ней...

Разграничение прав на уровне приложения
Доброго времени суток! Стоит задача - разграничить права пользователей (по группам) на уровне приложения Delphi. Решаю следующим...

Настроить разграничение прав для БД
Здравствуйте, помогите настроить разграничение прав. Я знаю что это возможно но, не знаю как. Попробовала, но у меня получилось на отдельно...

Разграничение прав доступа в БД (Access 2003)
Здравствуйте! Нужна помощь в разграничении прав доступа в БД, которую я создал в MS Access 2003 Пытался методом тыка, искать инструкции,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru