Uprawnienia i nadania
Jak zapisuje się prawa, jak się rozstrzygają i trzy reguły, które czynią model bezpiecznym.
Postać
Uprawnienie jest napisem:
resource:operation[:qualifier]submission:read:all, activity:enroll, problem:read:own. Kwalifikator jest
częścią operacji, a nie osobnym sprawdzeniem własności — own i all to dwa
różne uprawnienia, a nie jedno uprawnienie liczone względem predykatu.
Nadanie trzyma ich zestaw i jest zawężone dokładnie do jednego z dwojga:
- do całej instalacji, gdzie obowiązuje w każdej aktywności;
- do jednej aktywności, gdzie jest zarazem członkostwem. Zobacz Zapisy.
Ten sam napis znaczy w obu zakresach to samo. Zmienia się jego zasięg.
Jak się rozstrzygają
W tej kolejności:
- Nadanie w aktywności z flagą nadpisania jest całą odpowiedzią wewnątrz tej
aktywności. Nic innego tam nie obowiązuje — nawet
system:administrator. - W przeciwnym razie
system:administrator, trzymany w dowolnym wkładzie systemowym, omija każde sprawdzenie uprawnień. - W przeciwnym razie zestaw efektywny jest sumą: wszystkich wkładów systemowych plus nadania w aktywności, gdy pytanie dotyczy jednej aktywności.
Reguła 2 omija uprawnienia, a członkostwo uprawnieniem nie jest. Wysłanie rozwiązania wymaga aktywnego nadania w samej aktywności, więc administrator, który ma tylko nadanie systemowe, dostaje tam odmowę jak każdy inny — a nadanie w aktywności to właśnie bycie w niej zapisanym.
W tym modelu nigdzie nie ma odejmowania
Zakres systemowy jest sumą wkładów i tylko przyrasta. Nadanie w aktywności albo nadpisuje go w całości, albo się do niego dokłada. Nie zapiszesz prowadzący bez tego jednego uprawnienia jako odjęcia — powiesz to mniejszym zestawem albo nadpisaniem.
Zakres systemowy to kilka wierszy
W zakresie systemowym osoba ma po jednym wkładzie na źródło: jeden nadany ręcznie plus po jednym na każdego powiązanego dostawcę tożsamości. Lista oznacza wkład zarządzany dostawcą, od którego przyszedł.
Wkład zarządzany jest przepisywany z mapowania dostawcy przy każdym logowaniu i nie da się go edytować ręcznie. Poprawka trzymałaby się do następnego logowania tej osoby, a zmiana, która po cichu się cofa, jest gorsza niż odmowa. Zmień zamiast tego mapowanie dostawcy — zobacz Logowania zewnętrzne.
Flaga nadpisania
Na nadaniu w aktywności: to nadanie jest całą odpowiedzią wewnątrz aktywności. Tak mówi się „prowadzący wszędzie, poza tymi zawodami, w których startuję”.
Zanim ją ustawisz, weź pod uwagę dwie konsekwencje:
- Komuś, kto ma uprawnienia systemowe, obniżysz nią prawa w tej aktywności. Okno ostrzega o tym w chwili czynności, bo inaczej pierwszym objawem będzie prowadzący, któremu po cichu zniknął ekran.
- Może uwięzić swojego właściciela. Wewnątrz tej aktywności jest on tym, co
mówi nadanie — zwykle uczestnikiem bez
grant:update— więc żeby wyczyścić flagę, potrzeba innego prowadzącego tej aktywności albo administratora.
Praw administratora nadal nie da się przyciąć od dołu: flagę na nadaniu administratora mógł ustawić tylko administrator.
Trzy reguły, których pilnuje Server i których nie da się wyłączyć
Nikt nie nada uprawnienia, którego sam nie ma. Bez tego model jest ozdobą —
każdy, kto mógłby edytować nadanie, wpisałby do niego system:administrator.
Edytor oferuje tylko to, co masz, a Server odmawia reszty niezależnie od tego, co
zrobił ekran.
Wewnątrz aktywności „to, co masz” znaczy to, co masz w tej aktywności, a to nie jest ten sam zestaw co twoje prawa w całej instalacji.
system:administrator jest nieosiągalny przez mapowanie claimów. Mapowanie
decyduje, ile warta jest tu grupa z zewnętrznego katalogu, a katalog nigdy nie
może wykreować administratora. Server pilnuje obu części: reguła mapowania nie może
wskazać szablonu, który to uprawnienie zawiera, a do szablonu już zmapowanego nie
da się go dopisać.
Ta sama reguła dotyczy mapowania co nadawania: nikt nie zmapuje na uprawnienie, którego sam nie ma.
Instalacja nie zostanie bez administratora. Cofnięcie jedynego aktywnego
nadania systemowego, które trzyma system:administrator, przepisanie go bez
tego uprawnienia i przestawienie tego wiersza w stan zaproszenia to ta sama
czynność w trzech postaciach — Server odmawia za każdym razem. Najpierw nadaj to
uprawnienie komuś innemu; gdy tylko ma je drugie aktywne nadanie systemowe,
pierwsze jest znowu zwykłym wierszem.
Szablony
Szablon to nazwany zestaw uprawnień. Wypełnia nowe nadanie i zostaje zapomniany — nadanie trzyma kopię, a nazwa szablonu zostaje obok wyłącznie jako etykieta mówiąca, od czego zestaw się zaczął.
Zmiana szablonu nie dotyka nikogo, kto już go użył
Zakłada się to rozsądnie i błędnie, więc ekran mówi o tym na samej górze. Jeśli musisz zmienić to, co ma sto osób, zmieniasz ich nadania, a nie szablon, z którego przyszły.
Obszar Szablony uprawnień je wypisuje i oznacza te dostarczone z produktem jako wbudowane; tych nie usuniesz, bo po usunięciu jednego świeża instalacja nie miałaby od czego zacząć nadania.
Trzy dostarczane
participant — siedem uprawnień, i dokładnie tyle ma zwykły uczestnik:
activity:read
submission:read:own
submission:create
result:read:own
question:read:own
question:create
ranking:readmanager — wszystko, co ma uczestnik, plus to, czego trzeba do prowadzenia
aktywności: zmienianie jej i archiwizowanie, zapisywanie ludzi, biblioteka zadań
— czytanie własnych, zakładanie zadania, edycja, udostępnianie, archiwizowanie i
podpinanie do serii (read:own, create, update, share, archive,
attach) — cudze zgłoszenia i ich kod, ponowna ocena, anulowanie i wyłączanie z
klasyfikacji, cudze wyniki i logi, wszystkie pytania wraz z odpowiadaniem i
publikowaniem, ogłoszenia, czytanie i zdejmowanie zamrożenia rankingu, konta
tymczasowe oraz czytanie i zmienianie nadań.
Celowo nie ma w nim: activity:create, activity:delete,
problem:read:all, problem:delete, problem:import:external, user:* poza
kontami tymczasowymi, template:*, runner:*, instance:update,
provider:manage i trial:run. Prowadzący odpowiada za aktywność, a nie za
instalację, w której ona działa.
admin — jeden wpis, system:administrator. Jeden, bo omija resztę:
administrator z listą pojedynczych uprawnień to administrator, którego da się po
cichu przyciąć, a właśnie tej niespodzianki model ma unikać.
Gdzie edytuje się nadania
Dwa ekrany, jedna tabela pod spodem.
- Obszar Nadania wypisuje wszystkie nadania w instalacji, z filtrem po zakresie i po aktywności, i tam robi się nadanie systemowe.
- Zakładka Uczestnicy w aktywności to te same wiersze zawężone do tej aktywności i tam odbywają się zapisy.
Nadanie decyduje też o tym, czy ktoś jest prowadzącym: Server wylicza to przy
każdym zapisie z uprawnień w zestawie — cokolwiek ponad siedem uprawnień
uczestnika, z wyjątkiem trial:run — a prowadzących nie ma ani w liczbie
uczestników, ani w rankingu.