# Uživatelé, skupiny a oprávnění v OpenPlatform

> Jak se uživatel dostane k aplikaci v OpenPlatform: skupiny rozhodují, které aplikace uživatel vidí a jaké hodnoty oprávnění každá aplikace dostane.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: cs
Content-SHA256: 42cce7a9ee056c2f104e2d6d64c7235df01bc959918ece40a1340402ebd65172
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

OpenPlatform odděluje **kdo** (uživatelé), **kde** (aplikace) a **co** (oprávnění) se skupinami uprostřed:

- **Uživatel** má jméno, e-mail, jazyk, heslo a příznaky (`sa` pro správce, `isconfirmed`, `isdisabled`, `isinactive`, `notifications`, `sounds`...) a patří do libovolného počtu skupin (schéma `@User`, `plugins/setup/schemas/users.js`).
- **Skupina** má název, barvu, ikonu, volitelný `reference` a seznam oprávnění (schéma `@Group`, `plugins/setup/schemas/groups.js`).
- **Aplikace** deklaruje vlastní oprávnění: každé má název a `value`, prostý řetězec, kterému aplikace rozumí (`plugins/setup/schemas/apps.js`).

## Jak se počítá přístup

Funkce `FUNC.permissions(userid, callback)` v `definitions/func.js` sestaví pro uživatele:

1. skupiny uživatele, které nejsou zakázané;
2. řádky `tbl_group_permission` těchto skupin: řádek s oprávněním uděluje toto oprávnění aplikace a řádek **bez** oprávnění pouze uděluje aplikaci (uživatel ji vidí a dostane prázdný seznam oprávnění);
3. `value` každého uděleného oprávnění, pouze pro aplikace, které nejsou odstraněné ani zakázané.

Výsledek má tři části: aplikace uživatele (`apps`), hodnoty oprávnění podle aplikace (`permissions`) a skupiny (`groups`). Ukládá se jako JSON do sloupce `cache` uživatele spolu s `cachefilter`, který uvádí skupiny (`G<id>`) a aplikace (`A<id>`), na kterých závisí. Když se změní skupina nebo aplikace, `FUNC.clearcache(id)` vymaže mezipaměť každého uživatele, jehož filtr obsahuje tento identifikátor, a další požadavek ji znovu sestaví.

## Kde ji aplikace vidí

- Portál uvádí pouze aplikace v `apps` a odmítne otevřít jakoukoli jinou ("App not found").
- Aplikace dostane svůj seznam v `permissions`, když ověřuje spuštění (pole řetězců `value`), spolu s id skupin, aby mohla rozhodnout, co zobrazit ([jak se aplikace připojuje](/en/openplatform/how-an-app-connects/)).
- Obrazovka nastavení rozhoduje, kdo ji smí používat, podle příznaku `sa` uživatele.

Dobrý zvyk, který vyplývá ze způsobu, jakým kód funguje: pojmenujte `value` oprávnění podle akce ve vaší aplikaci (`orders.read`, `orders.write`) a skupiny namapujte na tyto hodnoty v OpenPlatform, aby vaše aplikace kontrolovala jen řetězce.
