Uživatelé, skupiny a oprávnění v OpenPlatform
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 (
sapro 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ý
referencea 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:
- skupiny uživatele, které nejsou zakázané;
- řádky
tbl_group_permissiontě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í); valuekaž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
appsa 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). - Obrazovka nastavení rozhoduje, kdo ji smí používat, podle příznaku
sauž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.