3ERP

3ERP - простая и бесплатная программа для бухгалтерского и оперативного учёта в учреждениях сферы торговли и услуг, общественного питания, складского хранения, автосервиса, медицины, логистики, производства, управления работами и заявками, поддерживающая до 100 пользователей, на русском языке и полностью бесплатная для 1 пользователя. На сайт (скачать)

12. Роли и права

Роли определяют права доступа пользователей к объектам системы. Поддерживается контроль на уровне строк (RLS).

12.1. Синтаксис роли

РОЛЬ ИмяРоли
    ДОСТУП ИмяОбъекта СПИСОК_ДЕЙСТВИЙ
    ДОСТУП ИмяОбъекта ПОЛНЫЙ
    
    ОГРАНИЧЕНИЕ_ДОСТУПА ИмяОбъекта ГДЕ условие
КОНЕЦ_РОЛИ

12.2. Действия (права)

ДействиеРазрешает
ЧТЕНИЕПросмотр записей
ДОБАВЛЕНИЕСоздание новых записей
ИЗМЕНЕНИЕРедактирование записей
УДАЛЕНИЕФизическое удаление
ПРОВЕДЕНИЕПроведение/распроведение документов
ПОЛНЫЙВсе вышеперечисленные (кроме ПРОВЕДЕНИЕ)

12.3. Пример роли менеджера

РОЛЬ Менеджер
    ДОСТУП Клиенты ЧТЕНИЕ, ДОБАВЛЕНИЕ, ИЗМЕНЕНИЕ
    ДОСТУП ЗаказНаряд ЧТЕНИЕ, ДОБАВЛЕНИЕ, ИЗМЕНЕНИЕ, ПРОВЕДЕНИЕ
    
    # Менеджер видит только свои заказы
    ОГРАНИЧЕНИЕ_ДОСТУПА ЗаказНаряд ГДЕ Менеджер = ТЕКУЩИЙПОЛЬЗОВАТЕЛЬ()
КОНЕЦ_РОЛИ

12.4. Пример роли директора филиала (мультифирма)

РОЛЬ ДиректорФилиала
    ДОСТУП ЗаказНаряд ПОЛНЫЙ, ПРОВЕДЕНИЕ
    
    # Видит только заказы своей организации
    ОГРАНИЧЕНИЕ_ДОСТУПА ЗаказНаряд ГДЕ Организация = ТЕКУЩАЯ_ОРГАНИЗАЦИЯ()
КОНЕЦ_РОЛИ

12.5. Создание пользователя

ПОЛЬЗОВАТЕЛЬ admin
    ПАРОЛЬ "admin123"
    ПОЛНОЕ_ИМЯ "Администратор Системы"
    ЭЛЕКТРОННАЯ_ПОЧТА "admin@3erp.ru"
    РОЛЬ Администратор
КОНЕЦ_ПОЛЬЗОВАТЕЛЯ

12.6. Системные функции для RLS

ФункцияВозвращает
ТЕКУЩИЙПОЛЬЗОВАТЕЛЬ()Объект текущего пользователя (с полями id, login, full_name, role)
ТЕКУЩАЯ_ОРГАНИЗАЦИЯ() Объект текущей организации (из контекста сессии)

12.7. RLS в процедурах (прямые SQL-запросы)

Важно: при использовании ЗАПРОС() RLS не применяется автоматически. Нужно добавить условие вручную:

ПРОЦЕДУРА ПолучитьМоиЗаказы
    ВЫЧИСЛИТЬ ТекПользователь = ТЕКУЩИЙПОЛЬЗОВАТЕЛЬ().id
    ВЫЧИСЛИТЬ SQL = "SELECT * FROM ЗаказНаряд WHERE Менеджер = " + ТекПользователь
    ВЫЧИСЛИТЬ Результат = ЗАПРОС(SQL)
    ВОЗВРАТ Результат
КОНЕЦ_ПРОЦЕДУРЫ

12.8. Проверка прав в процедурах

ПРОЦЕДУРА УдалитьКлиента
    ВЫЧИСЛИТЬ Пользователь = ТЕКУЩИЙПОЛЬЗОВАТЕЛЬ()
    
    ЕСЛИ Пользователь.role != "Администратор" ТО
        ОШИБКА "У вас нет прав на удаление"
    КОНЕЦ
    
    # ... код удаления ...
КОНЕЦ_ПРОЦЕДУРЫ
3536 | 0 | 3536 | 358 | 172 | 39