GraphQL.cz/Fórum/Jak správně nastavit přístupová práva v GraphQL?

Jak správně nastavit přístupová práva v GraphQL?

Zajímalo by mě, jak se dá správně nastavit přístupová práva v GraphQL. Příjde mi to jako dost důležitá věc, protože když pracujeme s API a různými uživatelskými rolemi, je potřeba mít jasně definovaná pravidla, kdo co může vidět a co může měnit. Uvažuju o tom, že bych chtěl mít nějakou strukturu, kde by uživatelé měli omezený přístup k citlivým datům. Uvažuji o implementaci nějakého mechanismu, který by kontroloval oprávnění na základě rolí uživatelů. Zároveň mě zajímá, jestli je lepší to řešit na úrovni resolverů nebo někde jinde? Jaké jsou nejlepší praktiky pro definování těchto práv? Narazil jsem na několik různých přístupů, ale stále nejsem úplně jistý, jak to udělat efektivně a bez zbytečného zdržování. Jak se tedy správně nastavují přístupová práva v GraphQL? Jaké knihovny nebo techniky se k tomu nejvíc hodí? Díky za rady.

135 slov
1.4 minut čtení
8. 6. 2024
Luboš Skála

Přístupová práva v GraphQL můžeš řešit různě, ale hodně lidí to dělá na úrovni resolverů. To je fajn, protože máš úplnou kontrolu nad tím, co se děje při dotazech. Můžeš tam klidně napsat logiku pro ověřování rolí a práv přímo v resolverech, což ti dává možnost filtrovat data podle toho, kdo je volá. Základní myšlenka je taková, že si uděláš nějakou strukturu role jako např. admin, user a guest a podle toho pak nastavíš přístup k jednotlivým typům dotazů.

Dalo by se taky využít middleware, pokud používáš nějaký Apollo Server třeba - tam můžeš mít jednotné místo pro validaci tokenu a rolí před tím, než dotaz projde do resolverů. Co se týče knihoven, tak třeba graphql-shield je super pro definování pravidel na základě rolí a má to i hezkou syntaxi.

Jinak doporučuju mít aspoň základní logiku na úrovni serveru a nenechávat všechno na klientech, protože pak bys mohl skončit s bezpečnostními dírami. A nezapomeň, že bys měl mít i testy na tyhle věci, abys měl jistotu, že to funguje jak má.

171 slov
1.7 minut čtení
1. 5. 2024
Zdeňka Křížová

Přístupová práva v GraphQL se fakt dají řešit různě, ale hodně lidí to dává na úroveň resolverů. To je asi nejčastější přístup, protože tam můžeš hned kontrolovat, co uživatel smí a nesmí dělat. Můžeš si vytvořit middleware, který bude ověřovat tokeny nebo role uživatelů před tím, než se resolver vůbec spustí. Tím pádem máš lepší kontrolu nad tím, co se děje.

Pokud jde o knihovny, tak třeba Apollo Server má skvělý support pro middleware, takže to můžeš snadno implementovat. Další možnost je použít knihovny jako graphql-shield, která ti umožní definovat pravidla přístupu v jasné syntaxi. Můžeš si tak udělat nějakou strukturu pro role – admini mají všechno, obyčejní uživatelé jenom to, co potřebují.

Další tip je rozdělit data do různých typů a mít jasně definované, co kdo může vidět. Například citlivá data skrýt a povolit k nim přístup jen vybraným rolím. Důležitý je taky audit – mít možnost logovat, kdo co dělal. Takže jasně stanovíš pravidla a pak je kontroluješ na úrovni resolverů. To by mělo pokrýt většinu případů.

167 slov
1.7 minut čtení
18. 4. 2023
Adam Štěpánek

Přístupová práva v GraphQL se dají řešit různýma způsobama, ale většinou se to dělá na úrovni resolverů. Můžeš použít middleware, který ti ověří roli uživatele ještě předtím, než se resolver vůbec spustí. Třeba když máš nějaký JWT token, tak si v resolveru můžeš ověřit, jestli ten uživatel má potřebnou roli pro danou akci.

Doporučil bych mít jasně definované role a co každá z nich může dělat. Například admin může mít přístup úplně všude, zatímco běžný uživatel jen k některým datům. Je dobrý si tyto pravidla napsat někam kódu, aby to bylo jasný pro všechny co na projektu dělaj.

Pokud chceš nějaký knihovny, můžeš zkusit Apollo Server, ten má docela dobrou podporu pro autentizaci a autorizaci. Jinak další možnost je GraphQL Shield, což je knihovna přímo zaměřená na správu přístupových práv v GraphQL.

Celkově platí, že čím víc si ty pravidla vyjasníš dopředu, tím míň problémů budeš mít později. Takže doporučuji plánovat a testovat, jak to funguje s různýma uživatelskýma rolama.

158 slov
1.6 minut čtení
1. 10. 2023
Vladimíra Bartošová
GraphQL.cz/Články/GraphQL a více zdrojů dat
Bezpečnost a přístupová práva ve vícezdrojové architektuře GraphQL: Klíčové tipy pro ochranu datObjevte, jak zajistit bezpečnost dat v GraphQL aplikacích, zejména při práci s různými zdroji. Naučte se, jak implementovat autentizaci a autorizaci p...
1000 slov
10 minut čtení
12. 12. 2021
Andrea Malá
Přečíst článek
Podobné otázky