Skip to content

BDD-17 — Copie du lien d'un fichier

🔗 Ticket fonctionnel

Copier un lien sécurisé vers un fichier

Le client externe peut copier un lien applicatif vers un fichier depose. L'acces reel au fichier reste verifie par le backend a l'ouverture du lien.

1. User Story

En tant que client externe,
Je veux obtenir un lien direct vers un fichier depose,
Afin de pouvoir le partager ou y faire reference facilement.

2. Criteres d'acceptance

  1. Un bouton Copier le lien est disponible sur chaque fichier.
  2. Le lien est copie dans le presse-papier avec confirmation visuelle.
  3. Le lien est securise et accessible uniquement aux personnes autorisees.

3. Flux complet

mermaid
sequenceDiagram
    autonumber
    participant U as 👤 Client externe
    participant F as 🖥️ Front
    participant C as 📋 Presse-papier
    participant API as 🧠 API NestJS
    participant DB as 🗄️ prisma.tool
    participant S3 as ☁️ Object Storage

    U->>F: Clique "Copier le lien"
    F->>C: Copie /files/:documentUuid
    F-->>U: Confirmation visuelle

    U->>F: Ouvre le lien /files/:documentUuid
    F->>API: GET /documents/:uuid/access-url
    API->>API: AuthGuard
    API->>DB: Verifie users_documents.user_id
    DB-->>API: bucket / path / name
    API->>S3: Genere une URL pre-signee inline
    API-->>F: url + filename
    F-->>U: Propose l'ouverture du fichier

4. Choix de securite

Le lien copie n'est pas une URL S3 pre-signee. C'est un lien applicatif :

text
/files/:documentUuid

L'URL S3 temporaire est generee uniquement apres authentification et verification des droits. Un utilisateur non autorise ne peut donc pas obtenir l'URL de stockage. Le lien expose un uuid public non predictible, jamais l'ID numerique interne.

Le lien ne donne aucun droit a lui seul : l'utilisateur doit etre authentifie et deja autorise sur le document cote backend.

5. Perimetre fonctionnel

  • Menu document : front/src/components/documents/DocumentListItem.vue
  • Copie clipboard : front/src/pages/upload/UploadPage.vue
  • Page d'acces : front/src/pages/documents/DocumentAccessPage.vue
  • Route front : front/src/router/routes.js
  • Store Pinia : front/src/stores/files-store.js
  • Endpoint back : GET /documents/:uuid/access-url
  • Policy back : back/src/api/documents/document-access-policy.service.ts
  • Service back : back/src/api/documents/document.service.ts

6. Apercu de l'interface

Menu d actions d un fichier : Telecharger et Copier le lien

Menu trois points sur un fichier — actions "Telecharger" (format d'origine) et "Copier le lien" (acces securise).

7. Points de verification

  • L'action Copier le lien est visible dans le menu trois points.
  • Le lien copie a la forme /files/:documentUuid.
  • Une notification confirme la copie.
  • Une notification d'erreur est affichee si le navigateur refuse l'acces au presse-papier.
  • La route /files/:documentUuid est protegee par l'auth front existante.
  • Le backend verifie l'appartenance du document avant de signer une URL S3 temporaire.

8. Tests associes

  • front/src/__tests__/components/documents/DocumentListItem.spec.js
  • front/src/__tests__/pages/upload/UploadPage.spec.js
  • front/src/__tests__/pages/documents/DocumentAccessPage.spec.js
  • front/src/__tests__/stores/files-store.spec.js
  • front/src/__tests__/router/routes.spec.js
  • back/src/api/documents/document.service.spec.ts