35 lines
1.1 KiB
Python
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,
|
|
} |