Роли пользователей
Описание ролевой модели и системы прав доступа.
Типы пользователей
Системные роли (Глобальные)
Super Admin
- Доступ: Полный контроль над всей платформой
- Права:
- Управление всеми tenants
- Системные настройки
- Мониторинг и аналитика
- Управление пользователями
- Техническая поддержка
Admin
- Доступ: Управление конкретным маркетплейсом
- Права:
- Настройки маркетплейса
- Управление пользователями tenant
- Контент-менеджмент
- Аналитика и отчеты
Бизнес роли (В рамках tenant)
Client (Владелец маркетплейса)
- Доступ: Управление собственным маркетплейсом
- Права:
- Создание и настройка маркетплейса
- Управление поставщиками
- Финансовые настройки
- Брендинг и дизайн
- Аналитика продаж
Supplier (Поставщик)
- Доступ: Управление собственными товарами/услугами
- Права:
- Добавление/редактирование продуктов
- Управление заказами
- Настройка доставки
- Финансовая отчетность
- Профиль компании
Customer (Покупатель)
- Доступ: Покупка товаров/услуг
- Права:
- Просмотр каталога
- Оформление заказов
- Управление профилем
- История покупок
- Отзывы и рейтинги
Матрица прав доступа
Действие | Super Admin | Admin | Client | Supplier | Customer |
---|---|---|---|---|---|
Создание маркетплейса | ✅ | ❌ | ✅ | ❌ | ❌ |
Настройки маркетплейса | ✅ | ✅ | ✅ | ❌ | ❌ |
Управление поставщиками | ✅ | ✅ | ✅ | ❌ | ❌ |
Добавление продуктов | ✅ | ✅ | ❌ | ✅ | ❌ |
Оформление заказов | ✅ | ✅ | ✅ | ❌ | ✅ |
Финансовая аналитика | ✅ | ✅ | ✅ | 📊* | ❌ |
Техподдержка | ✅ | 📞** | 📞** | 📞** | 📞** |
*📊 - только собственная статистика
**📞 - только создание обращений
Реализация ролей
В базе данных
-- Системные роли
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
);
Лучшие практики
- Принцип минимальных привилегий - давать только необходимые права
- Регулярный аудит - проверка актуальности ролей
- Временные права - использовать для одноразовых задач
- Многофакторная аутентификация - для критичных ролей
- Логирование - фиксировать все действия с правами