Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2014, 23:36   #11
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

Работы не боюсь, главное понимать, что делать.
Спасибо.
Можете пояснить кое -что. Что значит "читаете из БД уровень доступа" - как это реализовать?

И как задать при входе параметры интерфейса в соответствии с уровнем доступа?
вася радугов вне форума Ответить с цитированием
Старый 17.03.2014, 23:47   #12
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Можете пояснить кое -что. Что значит "читаете из БД уровень доступа" - как это реализовать?
Значение уровня доступа для конкретной роли выбирается простым запросом типа select и сохраняется в переменной для последующего использования пока именно этот конкретный пользователь работает с программой.
Цитата:
как задать при входе параметры интерфейса в соответствии с уровнем доступа?
Обычная проверка с использованием оператора if либо case. Для каждой кнопки, меню и т.д. программы проверяете уровень доступа на соответствие требуемому. Если равен или выше, то доступ разрешён, если нет запрещён. Разрешение или запрещение доступа можно легко сделать с помощью свойств Visible или Enabled на выбор.
всё это делаете до того как "рабочая" форма будет показана юзеру. Например, в событии OnShow. Только не используйте для этих целей OnCreate.
Streletz вне форума Ответить с цитированием
Старый 30.03.2014, 19:07   #13
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

Создал я новую форму, добавил на нее DBCombobox для ввода логина, DBEdit - для пароля и кнопку. Также создал две таблицы, как вы мне написали: Пользователи и роли.

Получается , что для входа в программу надо проверить уровень доступа. Для этого надо создать запрос. Можете подсказать примерно каким должен быть запрос?
вася радугов вне форума Ответить с цитированием
Старый 30.03.2014, 19:25   #14
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Получается , что для входа в программу надо проверить уровень доступа.
Естественно, иначе разграничение доступа теряет смысл. Откуда программа узнает, что вместо 1го пользователя в ней теперь работает 2й?
Цитата:
Для этого надо создать запрос.
Об этом я открытым текстом писал в предыдущих постах
Цитата:
Можете подсказать примерно каким должен быть запрос?
Примерно таким:
Код:
select [уровень_доступа] from [Роли] inner join [Пользователи] on [Роли].[id]=[Пользователи].[idРоли] where [Пользователи].[Логин]='Админ'
Разумеется, что слово 'Админ' было написано исключительно для примера. В рабочем запросе должен быть либо параметр, который будет принимать значение логина или запрос нужно формировать полностью программно.

Последний раз редактировалось Streletz; 30.03.2014 в 19:27.
Streletz вне форума Ответить с цитированием
Старый 30.03.2014, 20:02   #15
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

заменил DBCombobox на Combobox.
Попытался составить вот такой запрос. Подскажите в чем ошибка?
Код:
procedure TForm14.BitBtn1Click(Sender: TObject);
 var d: string;
begin
form14.ADOQuery1.Close;
form14.ADOQuery1.SQL.Clear;
form14.ADOQuery1.SQL.Add('SELECT roli.yroven_dostypa');
form14.ADOQuery1.SQL.Add('FROM roli INNER JOIN users ON roli.id = users.id_roli');
form14.ADOQuery1.SQL.Add('where users.login=d');
  d:=ComboBox1.Items[ComboBox1.itemindex];
  form14.ADOQuery1.Open;
end;
вася радугов вне форума Ответить с цитированием
Старый 30.03.2014, 20:16   #16
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
заменил DBCombobox на Combobox.
Это зря. У Вас учётные данные хранятся в БД. Как вы их будете от туда доставать? Можно, конечно, загрузить данные из БД и в ComboBox. Только, вот зачем дотягиваться до левого уха правой рукой.
А, если надо завести нового пользователя?
Цитата:
Подскажите в чем ошибка?
В запрос не передаётся логин.
  1. Потому, что переменная внутри текста и поэтому воспринимается как строка.
  2. Значение присваивается ей уже после формирования запроса.
Лично я вижу решение приблизительно таким (исправленное подчёркнуто):
Код:
procedure TForm14.BitBtn1Click(Sender: TObject);
 var d: string;
begin
form14.ADOQuery1.Close;
form14.ADOQuery1.SQL.Clear;
form14.ADOQuery1.SQL.Add('SELECT roli.yroven_dostypa');
form14.ADOQuery1.SQL.Add('FROM roli INNER JOIN users ON roli.id = users.id_roli');
form14.ADOQuery1.SQL.Add('where users.login='+QuotedStr(DBCombobox1.Items[DBCombobox1.ItemIndex]));
form14.ADOQuery1.Open;
end;
Примерно, как-то так...
Streletz вне форума Ответить с цитированием
Старый 30.03.2014, 20:36   #17
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

Спасибо, исправил свой запрос.
Цитата:
Сообщение от Streletz Посмотреть сообщение
Обычная проверка с использованием оператора if либо case. Для каждой кнопки, меню и т.д. программы проверяете уровень доступа на соответствие требуемому. Если равен или выше, то доступ разрешён, если нет запрещён. Разрешение или запрещение доступа можно легко сделать с помощью свойств Visible или Enabled на выбор.
OnCreate.
получается для проверки if/case тоже надо создавать запрос?
вася радугов вне форума Ответить с цитированием
Старый 30.03.2014, 20:54   #18
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от вася радугов Посмотреть сообщение
получается для проверки if/case тоже надо создавать запрос?
Достаточно просто добавить поля в Ваш запрос и сразу вытащить из обеих таблиц всё, что нужно и сохранить в переменных, а лучше в записи или классе, олицетворяющих текущего пользователя.
Streletz вне форума Ответить с цитированием
Старый 30.03.2014, 21:24   #19
вася радугов
Форумчанин
 
Регистрация: 09.04.2011
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Достаточно просто добавить поля в Ваш запрос и сразу вытащить из обеих таблиц всё, что нужно и сохранить в переменных, а лучше в записи или классе, олицетворяющих текущего пользователя.
А можете, пожалуйста, пояснить с примером, а то мне не очень понятно
вася радугов вне форума Ответить с цитированием
Старый 30.03.2014, 21:26   #20
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от вася радугов Посмотреть сообщение
А можете, пожалуйста, пояснить с примером, а то мне не очень понятно
Что именно? Запрос, запись с классом или ещё что-то?..
Streletz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы разные таблицы имели одинаковую ширину столбцов? Natalie_M Microsoft Office Word 7 02.05.2018 10:49
Как работать с этой программой? sosed Софт 0 25.11.2013 15:59
Как сделать так, чтобы в Debug и Release использовались разные ддл'ки? TwiX Visual C++ 7 08.11.2011 10:51
Как сделать чтобы файлы определенного типа открывались программой? Вадим Буренков Общие вопросы Delphi 3 07.07.2009 13:47
DLL или как работать со стороней программой??? nimf Общие вопросы Delphi 2 15.04.2008 17:11