Comprehensive Permission Analysis

Complete inventory of all 135+ permissions across 14 microservices with sync status, role matrix, and critical security findings

Complete analysis of the permission system across all MQUAD microservices. The system uses multi-layered RBAC with 135+ permissions distributed across 14 services.

Service Permission Summary

ServicePortPerm CountSync StatusOrphaned
Backend (Core RBAC)800052N/AN/A
Survey Service80019Partial3
Data Service800215Partial6
Sync Service800310Partial2
Form Service800421Full0
Analytics Service80059Not Synced8
Workspace Service80069Not Synced6
Webhook Service80075Not Synced5
Notification Service80080Not Synced0
Audit Service80100Not Synced0
Media Service80110Not Synced0
Feature Flags Service80130Not Synced0
TOTAL135+48 (36%)38+ (28%)

Critical Security Issues

#IssueServiceImpact
1No permission checks - any authenticated user can access ALL audit logsAuditData exposure
2No permission checks - any user can manage ALL notificationsNotificationSpam/abuse
3No permission checks - any user can access ALL mediaMediaData exposure
4Anonymous ingestion allowed - anyone can write audit logsAuditLog injection
5Anonymous downloads - media downloadable without authMediaData exposure

Default Roles

RoleDescriptionPermission Count
Super AdminSystem-wide access4
AdminFull application access52+
UserRegular user with self-management16
GuestRead-only access2
Billing ManagerBilling and payments only4
Survey ManagerSurvey CRUD and management16
Form BuilderForm creation and modification9
Field SupervisorEnumerator oversight16
EnumeratorForm filling and submission11
Data AnalystAnalytics and export4
ViewerRead-only form/dashboard access3

Recommendations

Immediate Actions (P0)

  • Add permission checks to Audit, Notification, Media, Feature Flags
  • Add audit_logs:view_only enforcement
  • Fix anonymous access to audit logs and media

High Priority (P1)

  • Add missing permissions to backend enum for Survey, Analytics, Workspace, Webhook
  • Assign orphaned permissions to appropriate roles

Medium Priority (P2)

  • Standardize permission naming (snake_case everywhere)
  • Replace string literals with enum references

File Locations

ServicePermission FileRole Checker File
Backendapi/domain/enum/permission.pyapi/infrastructure/security/permission_checker.py
Surveyapi/domain/enum/survey_permission.pyapi/interfaces/security/survey_role_checker.py
Dataapi/domain/enum/survey_permission.pyapi/interfaces/security/data_role_checker.py
Syncapi/domain/enum/survey_permission.pyapi/interfaces/security/sync_role_checker.py
Formapi/domain/enums/permission.pyapi/interfaces/security/form_role_checker.py
Analyticsapi/domain/enum/permission.pyapi/interfaces/security/analytics_role_checker.py
Workspaceapi/domain/enum/workspace_permission.pyapi/interfaces/security/workspace_role_checker.py
Webhookapi/domain/enums/__init__.pyapi/interfaces/security/webhook_role_checker.py