Sari la conținut

Autorizarea catalogului STAC

Catalogul STAC EOCube.Ro impune control al accesului bazat pe proprietate și vizibilitate pentru fiecare colecție și item. Dacă o cerere poate citi, crea, actualiza sau șterge o entitate este decis pe baza a două câmpuri purtate de entitatea însăși, a identității apelantului și a grupurilor din care acesta face parte.

Această pagină descrie regulile pe care o aplicație trebuie să le respecte la publicarea, căutarea, actualizarea sau ștergerea entităților STAC. Respectă-le și datele tale vor fi vizibile și modificabile exact așa cum intenționezi; ignoră-le și entitățile pot fi respinse la scriere sau ascunse silențios la citire.

Cine ești

Fiecare cerere autentificată poartă:

  • un nume de utilizator (identitatea ta) și
  • mulțimea de grupuri din care faci parte (căi de grup precum eocube-users/uvt-users/team-a).

Cererile pot fi și anonime (fără identitate). Apelanții anonimi pot doar citi, și doar entitățile publice.

Un număr mic de conturi sunt administratori; ele ocolesc regulile de mai jos și pot citi, scrie și șterge orice. Tot ce urmează descrie regulile pentru conturile obișnuite (non-administrator).

Cele două câmpuri de control

Fiecare colecție și item pe care îl publici trebuie să poarte aceste două câmpuri:

Câmp Tip Semnificație
eocube:owner string Numele de utilizator care deține entitatea.
eocube:visibility listă de string-uri Token-uri de acordare (grant) care decid cine altcineva mai poate citi sau scrie entitatea.

Unde se pun

  • Pe item-uri, ambele câmpuri se află sub properties (properties.eocube:owner, properties.eocube:visibility).
  • Pe colecții, ambele câmpuri se află la nivelul superior al obiectului colecție.

eocube:visibility trebuie să fie o listă, chiar și pentru o singură acordare (["public"], nu "public").

eocube:owner

  • Proprietarul are întotdeauna acces complet de citire, scriere și ștergere la entitate.
  • La creare, eocube:owner trebuie setat la propriul tău nume de utilizator. Nu poți crea o entitate deținută de altcineva.
  • Doar administratorii pot schimba proprietarul unei entități existente.

eocube:visibility

O listă de token-uri de acordare. Fiecare token extinde accesul de citire sau de citire+scriere dincolo de proprietar. Accesul propriu al proprietarului nu depinde de această listă.

Token Acordă
public Citire pentru toți, inclusiv apelanții anonimi. Folosește pentru date deschise.
private Niciun acces suplimentar (doar proprietarul). Un marcaj fără efect, echivalent cu o listă goală.
group:ro:<grup> Citire pentru membrii <grup> și ai oricărui sub-grup al său.
group:rw:<grup> Citire și scriere pentru membrii <grup> și ai oricărui sub-grup al său.
user:ro:<utilizator> Citire pentru acel utilizator. Folosește user:ro:* pentru orice utilizator autentificat.
user:rw:<utilizator> Citire și scriere pentru acel utilizator. Folosește user:rw:* pentru orice utilizator autentificat.

Potrivirea pe prefix de grup. O acordare de grup se aplică grupului numit și fiecărui sub-grup de sub el. De exemplu group:rw:eocube-users acordă acces de scriere unui membru din eocube-users/uvt-users/team-a, deoarece eocube-users este un strămoș al căii de grup a acelui utilizator.

Combinarea token-urilor. Token-urile sunt aditive; enumeră câte ai nevoie:

["public", "group:rw:eocube-users", "user:rw:ion.popescu"]

Această entitate este citibilă de oricine și poate fi scrisă de membrii eocube-users (și ai sub-grupurilor sale) și de utilizatorul ion.popescu.

Vizibilitatea este obligatorie

Nu există o valoare implicită. O entitate publicată fără o listă eocube:visibility este vizibilă și modificabilă doar de proprietarul ei — nu va apărea în căutările anonime sau ale altor utilizatori. Setează întotdeauna vizibilitatea explicit (folosește ["public"] pentru date deschise, ["private"] pentru acces doar al proprietarului).

Denumirea colecțiilor

Când creezi o colecție, id-ul ei trebuie să fie prefixat cu numele tău de utilizator:

<numele-tau-de-utilizator>-<nume>

De exemplu, utilizatorul ion.popescu poate crea ion.popescu-my-aoi, dar nu my-aoi sau altcineva-aoi. Colecțiile al căror id nu respectă acest tipar sunt respinse. (Item-urile nu sunt supuse unei reguli de denumire; ele sunt încadrate de colecția din care fac parte.)

Reguli per operație

Căutare și citire

  • O entitate apare în rezultatele tale doar dacă o deții sau dacă eocube:visibility îți acordă acces de citire — adică dacă acesta conține public, un token group:ro:/group:rw: pentru unul dintre grupurile tale (sau un strămoș), un token user:ro:/user:rw: pentru numele tău de utilizator, sau un wildcard *.
  • Apelanții anonimi văd doar entitățile a căror vizibilitate conține public.
  • Rezultatele sunt filtrate, nu refuzate: entitățile pe care nu ai voie să le vezi sunt pur și simplu omise din rezultatele căutării, iar căutările individuale se comportă ca și cum nu ar exista. O căutare nu eșuează niciodată pentru că unele entități sunt private.

Creare (publicare)

Când publici o colecție sau un item nou:

  1. Setează eocube:owner la propriul tău nume de utilizator. O creare al cărei proprietar lipsește sau nu ești tu este respinsă.
  2. Pentru colecții, denumește id-ul ca <numele-tau-de-utilizator>-<nume>.
  3. Setează eocube:visibility la accesul pe care îl intenționezi (de exemplu ["public"], ["private"], sau o listă de acordări de grup/utilizator).

Nu poți publica o entitate în numele altui utilizator, iar acordările de vizibilitate nu îți permit să creezi entități în spațiul de nume al altui utilizator.

Actualizare

  • Poți actualiza o entitate doar dacă o deții sau dacă eocube:visibility îți acordă acces de scriere — un token group:rw: pentru unul dintre grupurile tale, un token user:rw:<tu>, sau user:rw:*.
  • Acordările doar de citire nu permit actualizări. Un token group:ro:/user:ro: permite unui utilizator să vadă entitatea, dar nu să o modifice.
  • Păstrează eocube:owner la actualizare — doar administratorii pot reatribui proprietatea.

Ștergere

  • Ștergerea urmează aceeași regulă ca actualizarea: poți șterge o entitate doar dacă o deții sau ai o acordare de scriere asupra ei (group:rw:, user:rw:<tu>, sau user:rw:*).
  • O acordare de citire nu permite niciodată ștergerea.
  • Apelanții anonimi nu pot șterge nimic.

Listă de verificare pentru publicatori

  • [ ] Fiecare item și colecție poartă atât eocube:owner, cât și eocube:visibility.
  • [ ] eocube:owner este numele tău de utilizator.
  • [ ] eocube:visibility este o listă de token-uri valide.
  • [ ] Câmpurile item-ului sunt sub properties; câmpurile colecției sunt la nivelul superior.
  • [ ] Id-urile colecțiilor sunt <numele-tau-de-utilizator>-<nume>.
  • [ ] Publici date deschise cu ["public"], date private cu ["private"] și date partajate cu token-urile group:rw: / user:rw: potrivite.

Exemple

Item public, deținut de tine (câmpuri sub properties):

{
  "type": "Feature",
  "id": "S2A_...",
  "collection": "sentinel-2-l1c",
  "properties": {
    "eocube:owner": "ion.popescu",
    "eocube:visibility": ["public"]
  }
}

Colecție privată, doar pentru proprietar:

{
  "type": "Collection",
  "id": "ion.popescu-experiments",
  "eocube:owner": "ion.popescu",
  "eocube:visibility": ["private"]
}

Item partajat la citire+scriere cu o echipă, citibil de toți:

{
  "properties": {
    "eocube:owner": "ion.popescu",
    "eocube:visibility": ["public", "group:rw:eocube-users/uvt-users/team-a"]
  }
}