podlomar / kodim.cz

Web for publishing materials from programming courses
1 stars 5 forks source link

Návrh/diskuze: Přístupy řízené obsahem repozitáře místo databáze #57

Closed FilipChalupa closed 6 months ago

FilipChalupa commented 1 year ago

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ísto access: claim něco jako allowGroups: [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é.

FilipChalupa commented 1 year 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.

podlomar commented 1 year ago

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.

podlomar commented 1 year ago

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.

podlomar commented 1 year ago

Jak by se například řeklo: tato skupinka má přístup ke všemu v daweb kromě řešení příkladů?

FilipJirsak commented 1 year ago

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ášť.

FilipChalupa commented 1 year ago

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.

FilipChalupa commented 1 year ago

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ší)

FilipJirsak commented 1 year ago

@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.

FilipChalupa commented 1 year ago

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?

FilipJirsak commented 1 year ago

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.

podlomar commented 6 months ago

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.