User Groups
Organize users with groups for role-based access control.
What are Groups?β
Groups allow you to:
- Organize users by role or permission level
- Implement role-based access control (RBAC)
- Easily manage permissions for multiple users
Example Groupsβ
| Group | Description |
|---|---|
admins | Full administrative access |
moderators | Content moderation access |
premium | Premium subscription users |
beta-testers | Beta feature access |
π Manage groups in the Dashboard: Dashboard β Groups
Dashboard Only
Group management (create, edit, delete, assign users) is performed exclusively through the SyAuth Dashboard. There is no public API for group management.
To manage groups, go to syauth.com/dashboard β Groups.
Checking User Groupsβ
User groups are included in the user object after authentication.
- Next.js SDK
- Django
- JWT Claims
const { user } = useSyAuth();
// Check if user is in a group
const isAdmin = user?.groups?.includes('admins');
const isPremium = user?.groups?.includes('premium');
if (isAdmin) {
// Show admin features
}
RBAC Component:
// components/RequireGroup.tsx
'use client';
import { useSyAuth } from '@syauth/nextjs';
export function RequireGroup({ group, children, fallback }) {
const { user, isAuthenticated } = useSyAuth();
if (!isAuthenticated || !user?.groups?.includes(group)) {
return fallback || null;
}
return <>{children}</>;
}
In Django, access the user's groups from request.user:
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
@login_required
def admin_only_view(request):
user = request.user
# Check if user is in a group
if 'admins' not in user.groups:
return JsonResponse({'error': 'Access denied'}, status=403)
return JsonResponse({'message': 'Welcome, admin!'})
Decorator for group-based access:
from functools import wraps
from django.http import JsonResponse
def require_group(group_name):
def decorator(view_func):
@wraps(view_func)
def wrapper(request, *args, **kwargs):
if group_name not in getattr(request.user, 'groups', []):
return JsonResponse({'error': 'Access denied'}, status=403)
return view_func(request, *args, **kwargs)
return wrapper
return decorator
@require_group('admins')
def admin_dashboard(request):
return JsonResponse({'data': 'admin content'})
Groups are included in the ID token JWT claims:
{
"sub": "user-uuid",
"email": "[email protected]",
"groups": ["admins", "premium"]
}
Decode the token in your backend to access groups:
import jwt
def get_user_groups(id_token):
decoded = jwt.decode(id_token, options={"verify_signature": False})
return decoded.get('groups', [])
Group Propertiesβ
| Property | Type | Description |
|---|---|---|
id | UUID | Unique identifier |
name | string | Group name (unique) |
description | string | Optional description |
created_at | datetime | Creation timestamp |
Best Practicesβ
| Practice | Description |
|---|---|
| Use descriptive names | content-moderators vs cm |
| Keep groups focused | One purpose per group |
| Document group purposes | Maintain documentation |
| Regular audits | Review group memberships periodically |
Next Stepsβ
- Dashboard - Managing Groups - Full group management
-
- Complete API documentation