Перейти к основному содержимому

Роли пользователей

Описание ролевой модели и системы прав доступа.

Типы пользователей

Системные роли (Глобальные)

Super Admin

  • Доступ: Полный контроль над всей платформой
  • Права:
    • Управление всеми tenants
    • Системные настройки
    • Мониторинг и аналитика
    • Управление пользователями
    • Техническая поддержка

Admin

  • Доступ: Управление конкретным маркетплейсом
  • Права:
    • Настройки маркетплейса
    • Управление пользователями tenant
    • Контент-менеджмент
    • Аналитика и отчеты

Бизнес роли (В рамках tenant)

Client (Владелец маркетплейса)

  • Доступ: Управление собственным маркетплейсом
  • Права:
    • Создание и настройка маркетплейса
    • Управление поставщиками
    • Финансовые настройки
    • Брендинг и дизайн
    • Аналитика продаж

Supplier (Поставщик)

  • Доступ: Управление собственными товарами/услугами
  • Права:
    • Добавление/редактирование продуктов
    • Управление заказами
    • Настройка доставки
    • Финансовая отчетность
    • Профиль компании

Customer (Покупатель)

  • Доступ: Покупка товаров/услуг
  • Права:
    • Просмотр каталога
    • Оформление заказов
    • Управление профилем
    • История покупок
    • Отзывы и рейтинги

Матрица прав доступа

ДействиеSuper AdminAdminClientSupplierCustomer
Создание маркетплейса
Настройки маркетплейса
Управление поставщиками
Добавление продуктов
Оформление заказов
Финансовая аналитика📊*
Техподдержка📞**📞**📞**📞**

*📊 - только собственная статистика
**📞 - только создание обращений

Реализация ролей

В базе данных

-- Системные роли
CREATE TABLE user_roles (
id UUID PRIMARY KEY,
user_id UUID REFERENCES auth.users(id),
role app_role NOT NULL,
tenant_id UUID REFERENCES tenants(id), -- NULL для глобальных ролей
created_at TIMESTAMP DEFAULT NOW()
);

-- Роли в маркетплейсе
CREATE TABLE marketplace_users (
id UUID PRIMARY KEY,
tenant_id UUID REFERENCES tenants(id),
email TEXT NOT NULL,
role marketplace_role NOT NULL,
is_active BOOLEAN DEFAULT true
);

В коде

// Проверка роли
const hasRole = (role: string, tenantId?: string) => {
return useQuery({
queryKey: ['userRole', role, tenantId],
queryFn: () => checkUserRole(role, tenantId)
});
};

// Компонент с проверкой прав
const AdminOnlyComponent = ({ children }) => {
const { hasRole } = useAuth();

if (!hasRole('admin')) {
return <AccessDenied />;
}

return children;
};

RLS политики

Автоматическое применение ограничений на уровне базы данных:

-- Пример: Поставщики видят только свои продукты
CREATE POLICY "Suppliers can only see their products"
ON products FOR SELECT
USING (
supplier_id = get_current_marketplace_user_id()
AND tenant_id = get_current_tenant_id()
);

-- Клиенты видят все продукты в своем маркетплейсе
CREATE POLICY "Clients can see all marketplace products"
ON products FOR SELECT
USING (
tenant_id = get_current_tenant_id()
AND has_marketplace_role(get_current_tenant_id(), auth.email(), 'client')
);

Переключение ролей

Некоторые пользователи могут иметь несколько ролей:

const RoleSwitcher = () => {
const { availableRoles, currentRole, switchRole } = useAuth();

return (
<Select value={currentRole} onValueChange={switchRole}>
{availableRoles.map(role => (
<SelectItem key={role} value={role}>
{roleNames[role]}
</SelectItem>
))}
</Select>
);
};

Временные права

Система поддерживает временные повышения прав:

  • Время действия роли
  • Автоматическое понижение
  • Аудит временных прав
  • Уведомления об истечении

Аудит и безопасность

Все действия пользователей логируются:

CREATE TABLE user_actions (
id UUID PRIMARY KEY,
user_id UUID NOT NULL,
tenant_id UUID,
action TEXT NOT NULL,
resource TEXT,
timestamp TIMESTAMP DEFAULT NOW(),
ip_address INET,
user_agent TEXT
);

Лучшие практики

  1. Принцип минимальных привилегий - давать только необходимые права
  2. Регулярный аудит - проверка актуальности ролей
  3. Временные права - использовать для одноразовых задач
  4. Многофакторная аутентификация - для критичных ролей
  5. Логирование - фиксировать все действия с правами