# Użytkownicy, grupy i uprawnienia w OpenPlatform

> Jak użytkownik dociera do aplikacji w OpenPlatform: grupy decydują, które aplikacje widzi użytkownik i jakie wartości uprawnień otrzymuje każda aplikacja.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: pl
Content-SHA256: a1cc2cb1a9a2a89c2fb568ff0ad6fb420a64689ba7cb7718271cd171d5eac697
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

OpenPlatform oddziela **kto** (użytkownicy), **gdzie** (aplikacje) i **co** (uprawnienia), a pośrodku są grupy:

- **Użytkownik** ma nazwę, e-mail, język, hasło i flagi (`sa` dla administratora, `isconfirmed`, `isdisabled`, `isinactive`, `notifications`, `sounds`...) i należy do dowolnej liczby grup (schemat `@User`, `plugins/setup/schemas/users.js`).
- **Grupa** ma nazwę, kolor, ikonę, opcjonalny `reference` i listę uprawnień (schemat `@Group`, `plugins/setup/schemas/groups.js`).
- **Aplikacja** deklaruje własne uprawnienia: każde ma nazwę i `value`, zwykły ciąg znaków zrozumiały dla aplikacji (`plugins/setup/schemas/apps.js`).

## Jak obliczany jest dostęp

Funkcja `FUNC.permissions(userid, callback)` w `definitions/func.js` buduje dla użytkownika:

1. grupy użytkownika, które nie są wyłączone;
2. wiersze `tbl_group_permission` tych grup: wiersz z uprawnieniem przyznaje to uprawnienie aplikacji, a wiersz **bez** uprawnienia przyznaje tylko aplikację (użytkownik ją widzi i otrzymuje pustą listę uprawnień);
3. `value` każdego przyznanego uprawnienia, tylko dla aplikacji, które nie są usunięte ani wyłączone.

Wynik ma trzy części: aplikacje użytkownika (`apps`), wartości uprawnień według aplikacji (`permissions`) i grupy (`groups`). Jest zapisywany jako JSON w kolumnie `cache` użytkownika, wraz z `cachefilter` wymieniającym grupy (`G<id>`) i aplikacje (`A<id>`), od których zależy. Gdy zmienia się grupa lub aplikacja, `FUNC.clearcache(id)` czyści pamięć podręczną każdego użytkownika, którego filtr zawiera ten identyfikator, a kolejne żądanie odbudowuje ją.

## Gdzie widzi to aplikacja

- Portal wyświetla tylko aplikacje z `apps` i odmawia otwarcia jakiejkolwiek innej ("App not found").
- Aplikacja otrzymuje własną listę w `permissions`, gdy weryfikuje uruchomienie (tablica ciągów `value`), razem z identyfikatorami grup, aby mogła zdecydować, co pokazać ([jak łączy się aplikacja](/en/openplatform/how-an-app-connects/)).
- Ekran konfiguracji decyduje, kto może z niego korzystać, na podstawie flagi `sa` użytkownika.

Dobry nawyk, wynikający z działania kodu: nazwij `value` uprawnienia według akcji w swojej aplikacji (`orders.read`, `orders.write`) i przypisz grupy do tych wartości w OpenPlatform, aby aplikacja sprawdzała tylko ciągi znaków.
