Refactor permissions to Django auth Permission and Group model
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 15/100
- Tipo de issue
- Refactorización
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Área
- authorization, backend
Línea de trabajo
This is design work, not a first task. Start by reading Meshflow/common/access.py and Meshflow/common/drf_permissions.py, then the permission matrix in docs/permissions/README.md and docs/permissions/outstanding-tasks.md. Agree on the custom permission codenames and the feeder/admin group design with maintainers before writing code. Done means the views use has_perm checks, a migration creates the groups and permissions, and the #346 access matrix tests still pass.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Context
Follow-on from #346 (site-wide guest / user / feeder / admin model). Implementation in #354 introduces:
Meshflow/common/access.py—AccessLevelenum andget_access_level()Meshflow/common/drf_permissions.py— custom DRF classes (AllowGuestReadOnly,IsFeederOrAdmin, etc.)- A single Django
feedergroup for trusted operators;is_stafffor admin - Per-view permission class wiring and serializer redaction for guest reads
That delivery is intentional and shippable, but authorization logic is still mostly bespoke Python rather than declarative Django permissions.
Related work (not in scope here):
- API: #346 — https://github.com/pskillen/meshflow-api/pull/354
- UI: meshflow-ui #298 — https://github.com/pskillen/meshflow-ui/pull/299
- Deferred items:
docs/permissions/outstanding-tasks.md
Goal (future)
Refactor toward first-class Django Permission and Group objects so that:
- Capabilities (e.g.
trigger_traceroute,manage_api_keys,ingest_packets,manage_constellations,read_observed_node_positions) are defined as custom permissions on relevant models or a dedicated permissions app. - Groups map cleanly to roles: at minimum
feeder; consider whetheruserandadminshould also be groups vs continuing to useis_staff/ default authenticated user. - DRF viewsets use
DjangoModelPermissions,DjangoObjectPermissions, or thin wrappers that checkuser.has_perm(...)instead of ad-hocuser_is_feeder()scattered across views. - Guest read remains explicit (unauthenticated + serializer redaction) — likely still needs custom permission classes or a documented exception list, since Django auth has no built-in “guest”.
- Admin surface (DX, constellation CRUD) aligns with
is_staffor a dedicatedmeshflow_adminpermission set.
Why
- Auditability: permission matrix in docs maps to real
auth_permissionrows. - Operability: grant/revoke capabilities via Django admin or management commands without code changes.
- Consistency: reduces drift between
access.py, DRF classes, and view-level checks. - Extensibility: when constellation/regional ACLs return, object-level perms are already idiomatic.
Non-goals (this ticket)
- Re-introducing
ConstellationUserMembershipor regional ACLs - Changing the four access levels product model (guest / user / feeder / admin)
- UI route changes (stay in meshflow-ui #298)
Suggested approach (sketch)
- Inventory — derive permission codenames from
docs/permissions/README.mdmatrix and current DRFpermission_classes. - Define permissions — migration to create
Permissionrows; assign defaults tofeederand staff groups. - Replace helpers — migrate
user_is_feeder(),user_can_manage_api_keys(), traceroute helpers tohas_permchecks where possible; keepget_access_level()for serializer context / guest redaction. - DRF — standardize on permission classes backed by Django perms; document guest exceptions.
- Tests — permission-matrix tests assert
has_perm+ HTTP status, not onlyAccessLevel. - Docs — update
docs/permissions/README.mdwith codename ↔ endpoint mapping.
Acceptance criteria
- Custom permissions defined and listed in permissions docs
-
feeder(and admin) groups hold permissions via migrations/data migration, not only hard-coded group name checks - Representative viewsets use Django permission checks; no regression vs #346 matrix
- Guest redaction behaviour unchanged (tests)
- Management note for deploy (migrate + optional
run_deploy_tasksif used)
Priority
Future / after #346 ships. Safe to schedule once #354 is merged and permissions docs are stable.
- Lenguaje dominante
- Python
- Estrellas
- 1
- Forks
- 0
- Merge medio
- 1 d 20 h
- PR fusionados (30 d)
- 5
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pskillen/meshflow-api
-
enhancement meshtastic-2.8
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
pskillen/meshflow-api#459 ·
-
enhancement meshtastic-2.8
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
pskillen/meshflow-api#465 ·
-
enhancement meshtastic-2.8
Dificultad 4/5 3-5 días Aptitud para principiantes 22/100
pskillen/meshflow-api#464 ·
-
enhancement meshtastic-2.8
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
pskillen/meshflow-api#463 ·
-
[2.8] Handle missing rxTimeAbiertoenhancement meshtastic-2.8
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
pskillen/meshflow-api#462 ·
Todos los issues de pskillen/meshflow-api
Issues similares
-
Import errors are swallowed: PerthImplicitWatermarker silently becomes NonePosiblemente ocupada @JonRC la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
resemble-ai/Perth#23 ·
-
correction metadata
Dificultad 2/5 Menos de una hora Aptitud para principiantes 65/100
acl-org/acl-anthology#10753 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
earthtojake/text-to-cad#758 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 70/100
DataTalksClub/faq#545 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día