Skip to content

Права на статусы (access_statuses)

См. также: data-api.md · korfix-catalogs.md · catalog-rules.md Home

Каталог access_statuses управляет тем, какие статусы доступны для каждой роли пользователя в каждом каталоге.

Внутренняя механика (PHP, get_status_arr, get_disabled_statuses) — в ../backend/statuses.md


Принцип

В каталогах с полем status каждый статус — этап процесса. Через access_statuses администратор ограничивает, какие статусы доступны конкретной роли. Без записи — все статусы доступны.

Пример: менеджер переводит заказ в "В работе", но только руководитель может поставить "Оплачен" или "Отменён".


Структура записи

Поле Тип Описание
dbmodule select Каталог
role select Роль (тип аккаунта)
statuses multiselect Разрешённые статусы (whitelist)

Одна запись на пару каталог + роль. Alias: {dbmodule}_{role}.

Доступ: только root (создатель группы). Остальные роли, включая администраторов, не имеют доступа к управлению правами на статусы.


Чтение настроек

// Все правила
const resp = await App.fetch('/db/access_statuses.json');

// Для конкретного каталога
const resp = await App.fetch('/db/access_statuses.json?form[dbmodule]=b2b_orders');
resp.data.forEach(rule => {
    console.log(rule.role);      // "3"
    console.log(rule.statuses);  // "10,20,30"
});

Создание правила

await App.fetch('/db/access_statuses/add?edit&ajax=1', {
    method: 'POST',
    body: {
        'form[dbmodule]': 'b2b_orders',
        'form[role]': '3',
        'form[statuses]': ['10', '20'],
        submit: 1
    }
});

Получение каталогов, ролей и статусов

const schema = await App.fetch('/db/access_statuses/sheme.json');

// Каталоги с поддержкой статусов
const catalogs = schema.data.dbmodule.arr;

// Роли (типы аккаунтов)
const roles = schema.data.role.arr;

// Статусы по каталогам
const statusesByModule = schema.data.dbmodule.group_statuses;
// { "b2b_orders": { "10": "Новый", "20": "В работе" }, ... }

// Или статусы конкретного каталога через его схему
const catSchema = await App.fetch('/db/b2b_orders/sheme.json');
const statuses = catSchema.data.status.arr;

Сценарии для миниапов

Визуализация процесса

async function getStatusMatrix(catalog) {
    const [rulesResp, schemaResp] = await Promise.all([
        App.fetch(`/db/access_statuses.json?form[dbmodule]=${catalog}`),
        App.fetch(`/db/${catalog}/sheme.json`)
    ]);
    const allStatuses = schemaResp.data.status?.arr || {};
    return rulesResp.data.map(rule => ({
        role: rule.role,
        allowed: (rule.statuses || '').split(','),
        denied: Object.keys(allStatuses).filter(
            s => s && !(rule.statuses || '').split(',').includes(s)
        )
    }));
}

Проверка доступа перед сменой статуса

async function canSetStatus(catalog, statusId) {
    const resp = await App.fetch(`/db/access_statuses.json?form[dbmodule]=${catalog}`);
    if (resp.data.length === 0) return true;

    const params = await App.getRequestParams();
    const rule = resp.data.find(r => r.role === params.data.accountType);
    if (!rule) return true;

    return (rule.statuses || '').split(',').includes(String(statusId));
}

Проверка прав перед показом UI

Управление правами на статусы доступно только root (создателю группы). Перед показом интерфейса настройки стоит проверить:

const params = await App.getRequestParams();
if (params.data.userId !== params.data.groupId) {
    // Не root — показать предупреждение или скрыть секцию
    App.alert('Настройка прав на статусы доступна только владельцу аккаунта');
    return;
}
// Root — показать матрицу прав

Настройка воркфлоу при установке

Приложение может при установке создать правила доступа к статусам, настраивая бизнес-процесс под роли компании.


Каталог: /db/access_statuses | Бэкенд: ../backend/statuses.md

Home