Topic: Разграничение прав доступа различным пользователям

Добрый день.

Есть 3 отдела. Сотрудники в каждом из отделов имеют одинаковое начало логинов.

Суть вопроса в следующем:
Нужно назначить Администратора - видит все записи сотрудников, Админа 1го отдела - видит только записи 1го отдела (логины начинаются 01), Админа 2го отдела - видит только записи 2го отдела (логины начинаются 02), Админа 3го отдела - видит только записи 3го отдела (логины начинаются 03).

Как прописать (по подобию отображения/скрытия кнопок у администратора/пользователя) возможность отображения вносимой информации пользователей отделов "администраторам отделов"

Более подробно во вложении.

Заранее благодарен.

Post's attachments

Attachment icon razgr.docx 135.6 kb, 348 downloads since 2018-05-11 

2 (edited by derek 2018-05-13 14:44:52)

Re: Разграничение прав доступа различным пользователям

Привет, Андрей,
Возможно, некоторые из них помогают - это часть старого проекта. Я всегда стараюсь использовать стандартный MVD и держать скрипт маленьким; в этом примере я делаю это с повторяющимися формами. Я уверен, что есть другие способы.
Извините, что это на английском языке, и я надеюсь, вы сможете это понять.
Пользователи и пароли, которые я создал, - это
101 - london
201 - berlin
301 - rome
001 - moscow
Только пользователь 001 может видеть все и создавать отделы и пользователей.
С Уважением,
Derek

Post's attachments

Attachment icon andrei.zip 437.81 kb, 355 downloads since 2018-05-13 

Re: Разграничение прав доступа различным пользователям

Доброе утро!!!
Спасибо Derek, что откликнулся. Просмотрев твой скрипт - я все понял, что уже радует и обнадеживает)... Твой скрипт проще, а значит будет работать быстрей и однозначно в дальнейшем пригодится.

Суть вопроса немножко в другом:
Администратор подразделения должен не только редактировать конкретные, назначенные ему формы, таблицы и т.п., а должен при авторизации видеть информацию из единой таблицы - базы ответов таблица main, в которой ответы пользователей разных подразделений, и есть связанное поле id_otd.
Т.е. в базе ответов (таблица main) есть 90 ответов, по 10 ответов на каждого сотрудника. У первого подразделения сотрудника 01-01 -- 10 ответов, 01-02 -- 10 ответов, 01-03 -- 10 ответов - всего в первом подразделении 30 ответов (где 01-01, 01-02 это пользователи). Аналогично 2 подразделение 02-01, 02-02, 02-03 -- 30 ответов и 3 подразделение -- 30 ответов.
Так вот администратор подразделения 1 подразделения, который имеет id_podr = 2, должен видеть информацию во всех таблицах где связанное поле id_otd =1, а конкретно для таблицы main 30 записей первого подразделения.

Т.е. как-то при авторизации надо привязать, что пользователь у которого id_podr = 2, может работать только с записями где id_otd =1, я так понимаю, нужно ввести переменные но пока не хватает мозгов...

это нужно вставить где то здесь:
procedure frmLogin_bLogin_OnClick (Sender: string; var Cancel: boolean);
var
   s: string;
begin
     // SQL query for check user and password
     s:= SQLExecute('SELECT count(id) FROM login WHERE (id = ''' + IntToStr(frm_Login.cbLogin.dbItemID) + ''') AND (password = ''' + frm_Login.edPassword.Text + ''');');

     // SQL скрипт на проверку login и password
     if (s <> '0') and (s<>'') then
     begin
          sUser := frm_Login.cbLogin.Text; // имя пользователя
          idUser := frm_Login.cbLogin.dbItemID; // id имени пользователя в базе данных
          idotdel := SQLExecute ('SELECT id_otd FROM login WHERE id =' + IntToStr(iduser));
          iddolz := SQLExecute ('SELECT id_dolz FROM login WHERE id =' + IntToStr(iduser));
          idpod := SQLExecute ('SELECT id_pod FROM login WHERE id =' + IntToStr(iduser));

          // Определение Администратор - пользователь
          if SQLExecute ('SELECT admin FROM login WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else Form2.bUsers.Visible:=False;
           if SQLExecute ('SELECT admin FROM login WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else Form2.Button2.Visible:=False;
           if SQLExecute ('SELECT admin FROM login WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True else Form2.Button4.Visible:=False;

Re: Разграничение прав доступа различным пользователям

Приложите пожалуйста ваш проект, постараюсь реализовать необходимый функционал в вашем проекте.

Dmitry.

Re: Разграничение прав доступа различным пользователям

Дмитрий.
Кинул проект по мылу на адрес My Visual Database Mailer <support@drive-software.com> от odin_andrei@mail.ru.
Файл opr.rar.

Re: Разграничение прав доступа различным пользователям

Andrei wrote:

Дмитрий.
Кинул проект по мылу на адрес My Visual Database Mailer <support@drive-software.com> от odin_andrei@mail.ru.
Файл opr.rar.

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

Post's attachments

Attachment icon Login with visible own records and admin and departaments.zip 357.27 kb, 354 downloads since 2018-05-15 

Dmitry.