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

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

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

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

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

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. Логирование - фиксировать все действия с правами