Vi ste ovdje: start » hr » Interna dokumentacija » DokuWiki proširenja (WvdS) » ADO-Git » Odakle registracija montiranja uzima rječnik razina

Odakle registracija montiranja uzima rječnik razina

Stanje

Prihvaćeno. Zamjenjuje prijašnje stanje u kojem je registracijski sloj vodio vlastiti popis razina.

Okolnosti

Rječnik razina određen je na točno jednom mjestu: u tablici koja iz razine radi retke ACL-a (Domain/MountAclWriter). Registracijski je sloj (Domain/RepoMountRegistry) ipak primljenu razinu provjeravao prema drugom, vlastitom popisu od tri niza i svaku nepoznatu vrijednost zamjenjivao najstrožom razinom private. Dok su razine bile tri, popisi su se podudarali.

S četvrtom razinom team razišli su se. Čarobnjak je nudio team, prava su bila zapisana prema pravilima razine team, a registracija je tiho spremila private. Posljedica: zapis montiranja i datoteka conf/acl.auth.php opisivali su različite razine – i to na zaslonu čiji stupac Pravila postoji upravo zato da to podudaranje učini vidljivim.

Isti se prekid poslije ponovio dvije razine niže, i to dvostruko. Sloj pohrane vodi vlastiti popis razina u Model/AdoGitMount, a oznaka vidljivosti u pregledniku repozitorija još jedan u Ui/BrowseView. Nijedan nije proširen kad su došle razine showcase i library, a obje nepoznatu razinu tiho zamjenjuju s private umjesto da je prijave. Nakon prebacivanja 53 imenska prostora sloj pohrane je svaki od njih ČITAO kao private, dok je conf/acl.auth.php ispravno dodjeljivao library — a tko bi na zaslonu mountova bilo što spremio, vratio bi private i zatvorio javno čitljiv izvorni kod, a da nije dirnuo nijednu razinu.

Mehanizam

Registracija sada rječnik traži od tablice koja pravila zapisuje, umjesto da vodi njezinu kopiju:

if (!MountAclWriter::isValidTier($tier)) {
    $tier = 'private';
}

Ograničenje na private ostaje: razina koju ova instalacija ne poznaje nikad ne smije dodijeliti više od najstrože. Promijenio se samo izvor onoga što je »poznato«.

Regresijski test prolazi kroz MountAclWriter::tiers() i provjerava da svaka ondje navedena razina nepromijenjena stigne do pohrane. Peta razina koja bi ondje bila dodana, a ovdje zaboravljena, ruši test umjesto da tiho nestane.

Posljedice

  • U registraciji nikad više ne uvodite vlastiti popis razina – ni »za svaki slučaj«. Dva popisa istog rječnika razilaze se, a lom je tih.
  • Regresijski test nemojte prepisivati na čvrsto zapisana imena razina. Njegova je vrijednost upravo u tome što pita tablicu, a ne njezinu kopiju.
  • Povratak na najstrožu vrijednost je ispravan, tihi povratak nije. Sve tri kopije zamijenile su nepoznatu razinu bez riječi. Povratak štiti, šutnja skriva: u pogonu se tiho zamijenjena vrijednost ne razlikuje od ispravno pročitane.
  • Rječnik stoji na četiri mjesta, a tri su od njih kopije. Izvor je tablica koja piše pravila. Uvjet sheme, model pohrane i oznaka vidljivosti pitaju nju ili se provjeravaju prema njoj — jedan test uspoređuje shemu i model u oba smjera, jer bi jednostrana provjera ostavila drugu rupu otvorenom.
  • Montiranja razine team registrirana prije ove promjene i dalje su krivo spremljena. Na popisu stoje kao private, a njihova pravila odgovaraju razini team. Ispravak je jednokratan: u izborniku retka odaberite team i Spremi. Postojeći podaci ne sele se sami jer ništa ne može pouzdano razlučiti je li spremljena razina private tada bila željena ili nametnuta.
  • Nova razina treba samo jedan unos u MountAclWriter::TIERS. Čarobnjak, izbornik retka, tablica razina i registracija čitaju odande.

Povezane teme

hr/wiki/dwe/wkdoadogit/note-tier-vocabulary.txt · Zadnja izmjena: od 0.0.0.0