Django_Basic_Manufacturing_3/apps/accounts/context_processors.py
2025-08-22 17:05:22 +07:00

35 lines
1.1 KiB
Python

from .models import Role, Permission, RolePermission, UserRole
def custom_permissions(request):
"""
Context processor to add custom role-based permissions to template context
"""
if not request.user.is_authenticated:
return {}
# Get user's roles
user_roles = UserRole.objects.filter(user=request.user).values_list('role', flat=True)
# Get all permissions for user's roles
role_permissions = RolePermission.objects.filter(role__in=user_roles).select_related('permission')
# Create a dictionary of permissions organized by module
user_permissions = {}
for rp in role_permissions:
permission = rp.permission
module = permission.module
codename = permission.codename
if module not in user_permissions:
user_permissions[module] = {}
user_permissions[module][codename] = True
# Also add flat permissions for backward compatibility
flat_permissions = {rp.permission.codename: True for rp in role_permissions}
return {
'user_permissions': user_permissions,
'user_flat_permissions': flat_permissions,
}