Użytkownicy, grupy i uprawnienia w OpenPlatform
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 (
sadla 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
referencei 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:
- grupy użytkownika, które nie są wyłączone;
- wiersze
tbl_group_permissiontych grup: wiersz z uprawnieniem przyznaje to uprawnienie aplikacji, a wiersz bez uprawnienia przyznaje tylko aplikację (użytkownik ją widzi i otrzymuje pustą listę uprawnień); valuekaż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
appsi odmawia otwarcia jakiejkolwiek innej ("App not found"). - Aplikacja otrzymuje własną listę w
permissions, gdy weryfikuje uruchomienie (tablica ciągówvalue), razem z identyfikatorami grup, aby mogła zdecydować, co pokazać (jak łączy się aplikacja). - Ekran konfiguracji decyduje, kto może z niego korzystać, na podstawie flagi
sauż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.