Closed FilipChalupa closed 6 months ago
Usnadnilo by to i přejmenování lekcí. Teď, když někdo začne s něčím posouvat do jiných složek, tak se vystavuje riziku, že omylem někomu odepře přístup, protože třeba do databáze s přístupy ani nevidí nebo ho nenapadne na to myslet, protože to není moc na očích.
Rozumím těm výhodám. Tohle by chtělo do detailu promyslet. Ten současný systém jsem vymýšlel fakt dlouho a poctivě, aby to bylo dostatečně obecné a zvažoval jsem různé přístupy. Celé to teď úplně předělat by vyžadovalo dost práce, a zatím nedokážu dohlédnout důsledky. Ale nejsem proti se o tom bavit a vymyslet něco lepšího.
Ten problém s přejmenováním lekcí je nepříjemný a to, že se o to zatím staráme jen tři taky.
Ten současný systém je založený na principu "každý uživatel má přesný seznam clamiů na všechny resources, ke kterým může". Teď by to bylo obráceně, tedy ke každému resource se přidá seznam uživatelů (pomocí skupin), kteří k němu mají přístup.
Jak by se například řeklo: tato skupinka má přístup ke všemu v daweb kromě řešení příkladů?
S tím rozpracovaným PR https://github.com/podlomar/kodim.cz/pull/55 to půjde udělat tak, že právo udělovat oprávnění pro konkrétní část obsahu přes API přidělit i konkrétní skupině. Tj. třeba tým DA Web 2023 bude mít právo udělovat oprávnění pro materiály DA Web skupině studentek DA Web 2023. A mělo by jít přidat na tu úpravu práv i tlačítko na stránku.
Mít ta oprávnění v repositáři s materiály by se mi také líbilo víc. Ale chce to promyslet, jak by se to řešilo s tou hierarchií – aby se nemusela přidávat oprávnění ke každé lekci zvlášť.
Je mi teď trochu blbé vracet se k mému návrhu, když již udělaná práce jde jiným směrem. Omlouvám se.
Jak by se například řeklo: tato skupinka má přístup ke všemu v daweb kromě řešení příkladů?
Hmm. Že je zadání a řešení v jednom souboru je trochu ošemetné. Napadá mne kromě allowGroups
mít ještě něco jako solutionAllowGroups
. Nebo že by řešení byly v samostatných souborech. Třeba pro úlohu kostka.md
by se bral soubor kostka.solution.md
jako řešení, pokud by existoval.
A jinak s tou hierarchií mi v tuto chvíli dává nejvíc smysl kaskáda. Uživatel by musel mít práva na všechny části cesty k danému zdroji (stránce, cvičení, řešení). Root kodim.cz by byl public a všechno bez allowGroups
by bylo public. Pokud by bylo třeba otestovat, jestli uživatel má právo na soubor kodim.cz
> daweb
> js1
> uvod-do-js
> promenne
, tak by bylo potřeba kouknout, jestli je daweb
public nebo jestli je uživatel v některé ze skupin v allowGroups
, pokud ano, tak by se stejný test aplikoval na js1
, pak na uvod-do-js
a nakonec promenne
. (solutionAllowGroups
by pak asi muselo dědit od allowGroups
a mít ještě vlastní kaskádu, takže řešení bez solutionAllowGroups
v podobě souborů kostka.solution.md
mi přijde asi lepší)
@FilipChalupa Tak to vůbec neber, já jsem ten kód napsal jenom proto, abych si vyzkoušel, že to takhle může fungovat. Když se nepoužije, vůbec mi to nevadí. Určitě dává smysl se o tom pobavit – mně by se určitě víc líbilo, kdyby vše bylo spolu s materiály v repository, jenom mne zatím nenapadá, jak to co nejlépe udělat.
Přes noc se mi to ještě rozleželo a napadla mě ještě jedna komplikace.
Je potřeba, aby každý běh akademie/kurzu měl pro lektory a kouče unikátní skupinu (personal-daweb-jaro-2023
)? Podle návrhu výše by to totiž znamenalo, že by se asi muselo vždycky na začátku běhu ke všem lekcím a cvičením přidávat právo té skupině. Nestačí jen skupina ve stylu personal-daweb
, což by bylo jednodušší na údržbu?
muselo vždycky na začátku běhu ke všem lekcím a cvičením přidávat právo té skupině
Já jsem to chápal tak, že by pořád fungovala dědičnost, tj. oprávnění skupině by se dalo na celý kurz a tím by to automaticky zdědily i všechny sekce a lekce kurzu. Ale řešení by pak muselo být jiný typ objektu, na který by se dědičnost oprávnění z lekce nevztahovala. Tj. v hierarchii objektů by byly různé typy obsahu, třeba:
A ty by měly na sobě nezávislá oprávnění, která by se ve stromu dědila. Je to zobecnění toho, co psal @FilipChalupa – nebyly by jen dva typy objektů, kterým by se dávala oprávnění přes allowGroups
a solutionAllowGroups
, ale těch typů objektů by mohlo být víc.
Tady je problém, že když se sdilí lekce mezi kurzy, tak by se pak sdílely i ty přístupy. Navíc se pak ty přístupy těžko odvolávají, nebo mění, protože jsou rozstrkané po mnoha repozitářích. Takže mi pořád jako jeiná možnost vychází záznamy v databází, která už teď má admin rozhraní, takže by to mělo být snadnější. Nevíc už umožňujeme časově nastavitelné claimy.
Přemýšlím nahlas. 🤔 Co kdyby přístupy nebyly v databázi, ale řídily se tím, co je v repozitáři s materiály? V
entry.yml
tak mít místoaccess: claim
něco jakoallowGroups: [js1-jaro-2023-student, daweb-jaro-2023-student]
?Podle mě úprava přes api je zbytečně komplikovaná, málo transparentní a přehledná a vyžaduje zbytečně vysoké oprávnění. Aby nás honili ostatní lektoři z jiných kurzů (teď JS1, python, sql) s tím, že chtějí každý týden odemknout nové řešení přestává být udržitelné.