Skip to content

Backend: tillåt OWNER att skapa ärende och ladda upp bilagor på egna case #225

Description

@annikaholmqvist94

Efter att #216 mergats kan OWNER inte längre skapa ärenden eller ladda upp bilagor. OWNER ska kunna registrera ett case för eget djur och bifoga
filer, men ska fortsatt vara blockerad från alla journal-/kliniska operationer.

Önskat beteende

OWNER får göra:

  • POST /api/medical-records (endast för eget djur)
  • POST /api/attachments/** (endast på egna case som inte är CLOSED)
  • Läsa egna case och egna bilagor (oförändrat)

OWNER får inte göra:

  • PUT /api/medical-records/{id} (uppdatera journal)
  • PUT /api/medical-records/{id}/status, /close, /assign-vet
  • DELETE /api/attachments/**
  • DELETE /api/medical-records/{id}

Åtgärder

src/main/java/org/example/vet1177/security/SecurityConfig.java

  • Ändra regeln för POST /api/medical-records från hasAnyRole("VET","ADMIN") till authenticated() (policy sköter rollkontroll).
  • Ändra regeln för POST /api/attachments/** från hasAnyRole("VET","ADMIN") till authenticated().
  • Behåll hasAnyRole("VET","ADMIN") på PUT /api/medical-records/*/status, */close, */assign-vet, GET /api/medical-records/clinic/, DELETE /api/attachments/.
  • Behåll PUT /api/medical-records/{id} på hasAnyRole("VET","ADMIN") (OWNER får inte uppdatera själva journalen).

src/main/java/org/example/vet1177/policy/MedicalRecordPolicy.java

  • canCreate: ta bort case OWNER -> throw ForbiddenException. Ersätt med: OWNER tillåts om pet.getOwner().getId().equals(user.getId()), annars ForbiddenException("Du kan bara
    skapa ärenden för egna djur").
  • canUpdate, canUpdateStatus, canClose, canAssignVet: oförändrat (OWNER fortsatt blockerad).
  • Verifiera att auth-check körs innan isFinal-check enligt CodeRabbit-kommentaren i Fix/role based endpoint rules #216 — gäller oavsett detta issue.

src/main/java/org/example/vet1177/policy/AttachmentPolicy.java

  • canUpload: sluta kaskadera till MedicalRecordPolicy.canUpdate. Inför egen regel:
    • ADMIN → tillåts.
    • VET → tillåts om samma klinik som record.getClinic().
    • OWNER → tillåts om record.getOwner().getId().equals(user.getId()) och record.getStatus() != CLOSED; annars ForbiddenException.
  • canDelete: OWNER → ForbiddenException("Djurägare får inte radera bilagor"). VET/ADMIN oförändrat.

Tester att lägga till / uppdatera

  • MedicalRecordPolicyTest:
    • canCreate_ownerOfOwnPet_shouldNotThrow
    • canCreate_ownerOfOthersPet_shouldThrowForbidden
    • Oförändrat: canCreate för VET/ADMIN
  • AttachmentPolicyTest (ny eller utökad):
    • canUpload_ownerOfOwnOpenRecord_shouldNotThrow
    • canUpload_ownerOfOwnClosedRecord_shouldThrowForbidden
    • canUpload_ownerOfOthersRecord_shouldThrowForbidden
    • canUpload_vetSameClinic_shouldNotThrow, canUpload_vetOtherClinic_shouldThrowForbidden
    • canDelete_owner_shouldThrowForbidden
  • Integrationstest: OWNER kan POST:a medical_record + uppladda attachment på egna djur, men får 403 på status/close/assign/delete.

Acceptanskriterier

  • OWNER kan skapa ärende för eget djur (200/201)
  • OWNER får 403 vid create för annans djur
  • OWNER kan ladda upp bilagor på egna öppna case (efter skapande, inte bara i samma request)
  • OWNER får 403 vid upload på annans case eller CLOSED-case
  • OWNER får fortsatt 403 på status/close/assign/update/delete-attachment/delete-record
  • VET och ADMIN oförändrade
  • Alla befintliga tester fortsatt gröna

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions