Topic: Запрет доступа к форме

Для прав доступа, хочу сделать ограничение по доступу к формам. Скрипт (кусок) такой:

procedure frmLogin_bLogin_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
     // SQL-запрос для проверки пользователя и пароля
     s := VarToStr( SQLExecute('SELECT count(id) FROM userrights WHERE (login = ''' + frmLogin.edUser.Text + ''') AND (password = ''' + frmLogin.edPassword.Text + ''');') );

     // если SQL-запрос найден логин и пароль
     if (s <> '0') and (s<>'') then
     begin
          sUser := frmLogin.edUser.Text; // запомнить имя пользователя
          // ограничения для мастеров
        s := VarToStr( SQLExecute('SELECT master FROM userrights WHERE (login = ''' + sUser + ''');') );
          if s='1' then
          begin
              frmEmployeeCardPrice.Enabled := False;
               end;
       frmLogin.Close; // закрыть форму ввода пароля
     end else MessageDlg('Пароль не верен', mtError, mbOk, 0); // сообщение о неверном пароле

end;


Вопрос, можно-ли сделать вывод сообщения при попытке доступа к закрытой форме? По умолчанию выпадает "cannot make a visible window modal" можно конечно и это, но хочется чего-то на русском могучем.

надо идти вперёд....

Re: Запрет доступа к форме

kovalenko wrote:

Для прав доступа, хочу сделать ограничение по доступу к формам. Скрипт (кусок) такой:

procedure frmLogin_bLogin_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
     // SQL-запрос для проверки пользователя и пароля
     s := VarToStr( SQLExecute('SELECT count(id) FROM userrights WHERE (login = ''' + frmLogin.edUser.Text + ''') AND (password = ''' + frmLogin.edPassword.Text + ''');') );

     // если SQL-запрос найден логин и пароль
     if (s <> '0') and (s<>'') then
     begin
          sUser := frmLogin.edUser.Text; // запомнить имя пользователя
          // ограничения для мастеров
        s := VarToStr( SQLExecute('SELECT master FROM userrights WHERE (login = ''' + sUser + ''');') );
          if s='1' then
          begin
              frmEmployeeCardPrice.Enabled := False;
               end;
       frmLogin.Close; // закрыть форму ввода пароля
     end else MessageDlg('Пароль не верен', mtError, mbOk, 0); // сообщение о неверном пароле

end;


Вопрос, можно-ли сделать вывод сообщения при попытке доступа к закрытой форме? По умолчанию выпадает "cannot make a visible window modal" можно конечно и это, но хочется чего-то на русском могучем.



Никто не в курсе?

надо идти вперёд....

Re: Запрет доступа к форме

Пожалуйста приложите ваш проект, с описанием, по какому критерию необходимо ограничивать доступ к форме и к какой форме?

Dmitry.

Re: Запрет доступа к форме

DriveSoft wrote:

Пожалуйста приложите ваш проект, с описанием, по какому критерию необходимо ограничивать доступ к форме и к какой форме?

Дмитрий спасибо, что ознакомились с моим вопросом. Я могу приложить проект, просто вопрос без конкретной привязки. Сейчас настраиваю/эксперементирую с правами доступа и пришёл к тому, что часто проще закрыть доступ к форме, чем "закрывать" кнопки доступа (что может быть из разных мест) кнопки открытия данной формы. Закрыть доступ к форме я могу, просто понять, можно-ли заменить стандартное сообщение указанное мною выше? Или сделать своё?

надо идти вперёд....

Re: Запрет доступа к форме

kovalenko
К сожалению именно заменить сообщение не получиться, т.к. это ошибка, когда вы пытаетесь открыть форму, если для этой формы установлено свойство Enabled = False


вместо этого вы можете делать проверку данного свойство перед попыткой открытия формы, создав событие OnClick например для кнопки создания записи

procedure Form1_ButtonForNewRecord_OnClick (Sender: string; var Cancel: boolean);
begin
    if not Form2.Enabled then
    begin
        ShowMessage('Доступ закрыт.');
        Cancel := True;
    end;
end;
Dmitry.

Re: Запрет доступа к форме

DriveSoft wrote:

kovalenko
К сожалению именно заменить сообщение не получиться, т.к. это ошибка, когда вы пытаетесь открыть форму, если для этой формы установлено свойство Enabled = False


вместо этого вы можете делать проверку данного свойство перед попыткой открытия формы, создав событие OnClick например для кнопки создания записи

procedure Form1_ButtonForNewRecord_OnClick (Sender: string; var Cancel: boolean);
begin
    if not Form2.Enabled then
    begin
        ShowMessage('Доступ закрыт.');
        Cancel := True;
    end;
end;

А подскажите, как это вписать в скрипт ограничения доступа для мастеров (выше прикладывал), куда и как его вставить?

надо идти вперёд....

Re: Запрет доступа к форме

Необходимо создать событие OnClick для каждой кнопки, которая открывает форму, которая может быть заблокирована, т.о. вместо ошибки вы можете написать свое сообщение.

Dmitry.

Re: Запрет доступа к форме

DriveSoft wrote:

Необходимо создать событие OnClick для каждой кнопки, которая открывает форму, которая может быть заблокирована, т.о. вместо ошибки вы можете написать свое сообщение.

Понятно. Я думал, что можно прописать запрет доступа к форме в скрипте разграничения прав доступа, просто указав, что мастера не имеют право доступа к конкретной форме и тогда было-бы неважно каким образом он пытается получить доступ к ней. А так надо прописывать на все имеющиеся кнопки+на те, которые могут быть созданы в дальнейшем. Но всё равно спасибо.
И если можно ещё один вопрос. Есть такой скриптик, простой:

procedure frmApplication_Button23_OnClick (Sender: string; var Cancel: boolean); // показать Приём в ремонт
begin
    frmApplication.TabSheet1.TabVisible := True;
    if sUser <> '1'  then
    ShowMessage('Вы не можете редактировать данные клиента, указанные при приёме.');
    end;

Суть в чём, у меня там есть GroupBox  с полями ввода данных клиента. Настроено следующим образом-при нажатии кнопки создания нового заказа данный GroupBox доступен для ввода данных, при создании работ по данному заказу GroupBox недоступен для редактирования, доступ для редактирования имеет только администратор. Вопрос какой, я в скрипте написал, что нажатии кнопки Button23 все, кроме пользователя "1"(это администратор)  будут видеть надпись 'Вы не можете редактировать данные клиента, указанные при приёме.', а как прописать, чтобы эту надпись видели все, кроме всех пользователей с правами администратора. Надо поменять  if sUser <> '1'  then на что?
Спасибо.

надо идти вперёд....

Re: Запрет доступа к форме

kovalenko
Для этого необходимо создать новую глобальную переменную, например isAdmin: boolean;
Затем в процедуре procedure frmLogin_bLogin_OnClick присваивать этой переменной результат SQL запроса, который проверит, является ли текущий пользователь администратором.


Можете приложить ваш проект, постараюсь помочь.

Dmitry.

Re: Запрет доступа к форме

DriveSoft wrote:

kovalenko
Для этого необходимо создать новую глобальную переменную, например isAdmin: boolean;
Затем в процедуре procedure frmLogin_bLogin_OnClick присваивать этой переменной результат SQL запроса, который проверит, является ли текущий пользователь администратором.


Можете приложить ваш проект, постараюсь помочь.

Спасибо за ответ. Я вам отправлял свой проект по теме "Маркировка/выделение блоков в скрипта".

надо идти вперёд....

Re: Запрет доступа к форме

Добавьте глобальную переменную
   isAdmin: boolean;


далее добавьте в ваш скрипт строку

if s='1' then isAdmin := true;

в результате должно получить так

          // проверка прав администратора
          s := VarToStr( SQLExecute('SELECT administrator FROM userrights WHERE (login = ''' + sUser + ''');') );
          if s='0' then
          begin
             frmDict.Button50.Enabled := False; // если пользователь не имеет прав администратора, отключить кнопку, чтобы создать других пользователей
             Form2.bUsers.Enabled := False;
             frmApplication.Button26.Visible := False; //невидимоть кнопки педактирование клиента в приёме в ремонт
          end;
          if s='1' then isAdmin := true;


затем можете использовать эту переменную, пример

    frmApplication.TabSheet1.TabVisible := True;
    if not isAdmin  then
    ShowMessage('Вы не можете редактировать данные клиента, указанные при приёме.');
Dmitry.

Re: Запрет доступа к форме

DriveSoft wrote:

Добавьте глобальную переменную
   isAdmin: boolean;


далее добавьте в ваш скрипт строку

if s='1' then isAdmin := true;

в результате должно получить так

          // проверка прав администратора
          s := VarToStr( SQLExecute('SELECT administrator FROM userrights WHERE (login = ''' + sUser + ''');') );
          if s='0' then
          begin
             frmDict.Button50.Enabled := False; // если пользователь не имеет прав администратора, отключить кнопку, чтобы создать других пользователей
             Form2.bUsers.Enabled := False;
             frmApplication.Button26.Visible := False; //невидимоть кнопки педактирование клиента в приёме в ремонт
          end;
          if s='1' then isAdmin := true;


затем можете использовать эту переменную, пример

    frmApplication.TabSheet1.TabVisible := True;
    if not isAdmin  then
    ShowMessage('Вы не можете редактировать данные клиента, указанные при приёме.');

Спасибо большое! Буду пробовать.
Ещё раз спасибо!

надо идти вперёд....

Re: Запрет доступа к форме

DriveSoft wrote:

Добавьте глобальную переменную
   isAdmin: boolean;


далее добавьте в ваш скрипт строку

if s='1' then isAdmin := true;

в результате должно получить так

          // проверка прав администратора
          s := VarToStr( SQLExecute('SELECT administrator FROM userrights WHERE (login = ''' + sUser + ''');') );
          if s='0' then
          begin
             frmDict.Button50.Enabled := False; // если пользователь не имеет прав администратора, отключить кнопку, чтобы создать других пользователей
             Form2.bUsers.Enabled := False;
             frmApplication.Button26.Visible := False; //невидимоть кнопки педактирование клиента в приёме в ремонт
          end;
          if s='1' then isAdmin := true;


затем можете использовать эту переменную, пример

    frmApplication.TabSheet1.TabVisible := True;
    if not isAdmin  then
    ShowMessage('Вы не можете редактировать данные клиента, указанные при приёме.');


Дмитрий здравствуйте.
Выпадает ошибка:

Post's attachments

Attachment icon MVD.jpg 178.32 kb, 187 downloads since 2017-04-27 

надо идти вперёд....

Re: Запрет доступа к форме

Вы забыли добавить глобальную переменную isAdmin, в самом верху вашего скрипта должно быть так

var
   sUser: string = '';
   idUser: integer;
   isAdmin: boolean;  
Dmitry.

15 (edited by kovalenko 2017-04-28 08:55:33)

Re: Запрет доступа к форме

DriveSoft wrote:

Вы забыли добавить глобальную переменную isAdmin, в самом верху вашего скрипта должно быть так

var
   sUser: string = '';
   idUser: integer;
   isAdmin: boolean;  

Здравствуйте. Т.е я к текущему

procedure frmLogin_bLogin_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;

добавляю

var
   sUser: string = '';
   idUser: integer;
   isAdmin: boolean


Просто не совсем понятно. Изначально s: string; у вас sUser: string = ''; . Как правильно (без ущерба текущим настройкам) это совместить? Или я просто вместо изначально-текущего варианта ставлю ваш и переменная s становится sUser с заменой в текущем скрипте s на sUser ?
Спасибо!

надо идти вперёд....

Re: Запрет доступа к форме

этот блок должен быть в самом верху скрипта, на строке 1

var
   sUser: string = '';
   idUser: integer;
   isAdmin: boolean;  
Dmitry.

Re: Запрет доступа к форме

DriveSoft wrote:

этот блок должен быть в самом верху скрипта, на строке 1

var
   sUser: string = '';
   idUser: integer;
   isAdmin: boolean;  

Спасибо!

надо идти вперёд....