70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Check user permissions and hospital assignments
|
|
"""
|
|
import os
|
|
import django
|
|
|
|
# Setup Django
|
|
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.dev')
|
|
django.setup()
|
|
|
|
from apps.accounts.models import User
|
|
from apps.organizations.models import Hospital
|
|
|
|
print("="*70)
|
|
print("USER PERMISSIONS CHECK")
|
|
print("="*70)
|
|
|
|
# List all users
|
|
users = User.objects.all()
|
|
print(f"\nTotal users: {users.count()}")
|
|
|
|
for user in users:
|
|
print(f"\n{'='*70}")
|
|
print(f"User: {user.username} (ID: {user.id})")
|
|
print(f"Email: {user.email}")
|
|
print(f"Is Active: {user.is_active}")
|
|
print(f"Is Superuser: {user.is_superuser}")
|
|
print(f"Is Staff: {user.is_staff}")
|
|
print(f"Hospital: {user.hospital}")
|
|
|
|
# Check role
|
|
print(f"Is PX Admin: {user.is_px_admin()}")
|
|
print(f"Is Hospital Admin: {user.is_hospital_admin()}")
|
|
|
|
# Check what surveys they can see
|
|
from apps.surveys.models import SurveyInstance
|
|
|
|
# Apply same RBAC logic as the view
|
|
if user.is_px_admin():
|
|
queryset = SurveyInstance.objects.all()
|
|
print("Can see: All surveys (PX Admin)")
|
|
elif user.is_hospital_admin() and user.hospital:
|
|
queryset = SurveyInstance.objects.filter(survey_template__hospital=user.hospital)
|
|
print(f"Can see: Surveys for hospital {user.hospital.name}")
|
|
elif user.hospital:
|
|
queryset = SurveyInstance.objects.filter(survey_template__hospital=user.hospital)
|
|
print(f"Can see: Surveys for hospital {user.hospital.name}")
|
|
else:
|
|
queryset = SurveyInstance.objects.none()
|
|
print("Can see: NO SURVEYS (no permissions/hospital)")
|
|
|
|
visible_count = queryset.count()
|
|
print(f"Visible surveys count: {visible_count}")
|
|
|
|
print("\n" + "="*70)
|
|
print("HOSPITALS")
|
|
print("="*70)
|
|
|
|
hospitals = Hospital.objects.all()
|
|
for hospital in hospitals:
|
|
print(f"\n{hospital.name} (Code: {hospital.code})")
|
|
print(f" Status: {hospital.status}")
|
|
|
|
# Count surveys per hospital
|
|
survey_count = SurveyInstance.objects.filter(
|
|
survey_template__hospital=hospital
|
|
).count()
|
|
print(f" Total surveys: {survey_count}")
|