Refactor permissions to Django auth Permission and Group model
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 15/100
- Tipo di issue
- Refactoring
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Ambito
- authorization, backend
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- Python
- Stelle
- 1
- Fork
- 0
- Merge medio
- 1g 10h
- PR unite (30g)
- 8
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di pskillen/meshflow-api
-
enhancement meshtastic-2.8
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
pskillen/meshflow-api#459 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 73/100
pskillen/meshflow-api#472 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement meshtastic-2.8
Difficoltà 4/5 3-5 giorni Idoneità per principianti 22/100
pskillen/meshflow-api#464 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement meshtastic-2.8
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
pskillen/meshflow-api#463 ·
I maintainer di solito rispondono entro 1 giorno
-
[2.8] Handle missing rxTimeApertaenhancement meshtastic-2.8
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
pskillen/meshflow-api#462 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di pskillen/meshflow-api
Issue simili
-
Paraxial.trace returns NaN for an object at infinity when the entrance pupil is at the first surfaceAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement ios launcher
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Substrait consumer doesn't recognise `shift_left` / `shift_right` from functions_arithmetic.yamlApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
apache/datafusion#27059 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
loteran/Arctis-Sound-Manager#368 ·
I maintainer di solito rispondono entro 1 giorno
-
feed submission
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
MobilityData/mobility-database-catalogs#1787 ·
I maintainer di solito rispondono entro 2 giorni