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, }