Skip to content

Права msorder_* закрывают покупателей с персональными данными: нужны отдельные mscustomer_* #895

Open

Description

@biz87

Версия: 1.14.1-beta2

Суть

Права msorder_* закрывают не только заказы. Под ними же лежат покупатели с персональными данными, их адреса, группы покупателей и отгрузки. Отдельных прав для покупателей (mscustomer_*) в компоненте нет.

Что реально закрыто каждым правом (config/routes/manager.php):

Право Контроллеры под ним
msorder_list OrdersController, CustomersController, CustomerAddressesController, CustomerGroupsController, OrderShipmentController
msorder_save OrdersController, CustomersController, CustomerAddressesController, CustomerGroupsController, OrderShipmentController
msorder_view CustomersController, CustomerGroupsController
msorder_remove CustomersController, CustomerAddressesController, CustomerGroupsController

CustomersController::getList отдаёт first_name, last_name, email, phone; msorder_remove закрывает delete и bulkDelete покупателей.

Почему это важно

1. Имя права не отражает его охват. Администратор, выдающий msorder_list человеку «чтобы смотрел заказы», не ожидает, что тот получит выгрузку клиентской базы с контактами. При разборе прав по названиям это неочевидно: в карте прав и в лексиконе написано про заказы.

2. Расходится с тем, как компонент сам защищает эти данные. В manager.php:1060 стоит комментарий и отдельная защита как раз из-за PII покупателей:

// Model fields data reads: visible embeds comboOptions; combo-options executes sources
// (e.g. msCustomer PII). Require a form/settings permission — not mgr-auth alone (#613).

То есть один путь к тем же данным уже ужесточали осознанно (#613), а основной список покупателей остаётся под правом с «заказным» именем.

3. Гранулярность. Сейчас нельзя дать доступ к заказам, не дав базу покупателей, — это одно и то же право. Для магазина, где заказами занимается подрядчик или оператор, разделение было бы естественным.

Предложение

Завести отдельные права для покупателей и перевести на них соответствующие роуты:

  • mscustomer_list — список покупателей, адреса, группы;
  • mscustomer_view — карточка покупателя;
  • mscustomer_save — сохранение покупателя, адресов, групп;
  • mscustomer_remove — удаление, включая массовое.

Отгрузки (OrderShipmentController) под msorder_* выглядят уместно — это часть заказа.

Совместимость

Правка ломающая: у тех, кому выдан только msorder_*, пропадёт доступ к покупателям. Смягчить можно резолвером — выдать новые права везде, где уже есть msorder_list / msorder_save / msorder_remove, чтобы текущее поведение сохранилось, а дальше администратор сможет разделить их сам.

Удобный момент для такой правки — вместе с #893, где и так появляется резолвер раздачи прав по политикам.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions