Topic: Права на редактирование и удаление записей в таблице

Добрый день. На форме есть таблица куда вносятся данные. Данные вносят пользователи с разных организаций. При входе в саму программу запоминается имя пользователя и организация к которой он относиться.

sUser := frmLogin.cbLogin.Text; // remember username
sOrganization := frmLogin.cbOrg.Text; // remember organization

И вот что в итоге я хочу: 1) При внесении новой информации в таблицу автоматически должно подставляться название организации которое было выбрано при входе в программу и которое нельзя поменять.
2) Что бы нельзя было редактировать и удалять записи которые были созданы другими пользователями с других организаций, а только максимум просмотр. То есть например Вася с организации №1 может свободно создавать новые свои записи, может их свободно редактировать или удалять, Петя с организации №1 так же может добавлять новые записи, может редактировать/удалять записи свои и пользователя Васи с той же организации, но другой пользователь Коля из организации №2 может создавать свои записи, редактировать их или удалять, но не может редактировать или удалять записи которые были созданы пользователями с организации №1, максимум только просмотр. Было бы вообще замечательно если будет разграничение прав еще внутри самой организации - Вася например может добавлять/редактировать/удалять инофрмацию в орагизации №1, а вот Петя только добавлять и редактировать но не удалять в организации №1.Заранее спасибо.

Re: Права на редактирование и удаление записей в таблице

Hi Bullet,
You can do all of this by combining the standard 'user roles' functionality with a bit of script (see attachment).
1.  The user's name, organisation and creation date is automatically created and cannot be changed by the user.
2.  All users can view each other's data
3.  Only the user that added the data can amend that data.
4.  User 'petya' can only add and edit data but is not allowed to delete data.
In the example, passwords are the same as the user id.
Derek.

Post's attachments

Attachment icon empty basic template.zip 440.52 kb, 55 downloads since 2026-03-20 

Re: Права на редактирование и удаление записей в таблице

Bullet3203 wrote:

И вот что в итоге я хочу....


На уровне данных вам потребуется:
- задействовать систему авторизации (см. проект от Derek)
- создать таблицу с организациями (Organization)
- добавить поле-связь _user.id_organization
- добавить поле-связь <nтаблица>.id_organization в тех таблицах, где вы хотите ограничивать доступ к данным по организации


На уровне интерфейса:
- формы отображения/редактирования справочника организаций
- формы отображения/редактирования штатного состава организации - это может быть форма детализации для формы редактирования организации или общий список пользователей с простой формой редактирования для привязки пользователя к организации


На уровне скриптов:
- при добавлении новых записей прописывать туда организацию текущего пользователя
- при попытке редактирования/удаления проверять на соответствие информацию об организации. Проще всего это делать в обработчике OnClick соответствующей кнопки.


Расширенное управление правами вы можете сделать
- через роли (см. проект от Derek) - через настройки компонент (кнопок) - простое решение, но у пользователя одновременно может быть только одна роль
- добавлением нужных полей в таблицу _user - более гибкое решение, но потребует дополнительных скриптов, что позволит управлять правами на ресурсы/действия в произвольных сочетаниях.
- добавлением нужных полей в таблицу _role - классическое решение управления ресурсами, похоже на предыдущее по сложности, но позволит комбинировать встроенную систему управления прав (по ролям) и расширенную (по функциям).


Я бы посоветовал также добавить связь записи в целевой таблице с конкретным пользователем, чтобы четко видеть, кто автор. Это может потребоваться в случае, если нужно управлять доступом на уровне пользователя. Ну а потом вам захочется добавить историю изменений, чтобы понимать, кто накосячил при редактировании или удалении. Это реализуется либо добавлением отдельного поля с датой редактирования в целевой таблице и флагом удаления, либо отдельным реестром фиксации изменений , где хранится имя таблицы, номер записи, имя поля, старое значение и пользователь, внёсший изменения. В этом случае также потребуется заменить удаление на флаг удаления.

Визуальное программирование: блог и телеграм-канал.