Promotic
WikipediaLinkedInYoutubeTwitterFacebook

Správa uživatelů, oprávnění a přihlašovací systém

Systém uživatelů umožňuje projektantům vytvářet zabezpečené PROMOTIC aplikace.

V aplikaci je konfigurovatelný seznam všech lokálních a síťových uživatelů aplikace s příslušnými hesly. V systému PROMOTIC je dále zabudováno přihlašování lokálních i síťových uživatelů do běžící aplikace. Pokud vznikne požadavek (lokální nebo síťový) na chráněnou operaci, pak operace bude provedena jen pokud má příslušný uživatel požadované oprávnění. Pokud uživatel požadované oprávnění nemá, pak operace selže s chybovým hlášením.

 

Subsystém se sestává z následujících logických částí:

1) Seznam skupin uživatelů aplikace: Umožňuje vytvořit seznam všech logických skupin uživatelů aplikace (např. $ADMIN, $OPER, GUESTS atd.). Konfigurace se provádí ve vývojovém prostředí v záložce Uživatelé.
2) Seznam uživatelů aplikace: Umožňuje vytvořit seznam všech uživatelů aplikace s určením typu uživatele (lokální a/nebo síťový), nastavit uživatelům přihlašovací hesla a určit členství ve skupinách uživatelů.

Konfigurace se provádí ve vývojovém prostředí v záložce Uživatelé, v běžící aplikaci pomocí metody Pm.WndEditUsers v okně editace uživatelů nebo přímo metodami Pm.AddUser a Pm.RemoveUser.

3) Oprávnění u chráněných operací aplikace: Umožňuje chránit kritické části aplikace před neoprávněným vstupem uživatelů aplikace (například otevření nebo zavření obrazu, zastavení aplikace, atd.).

Oprávnění se konfigurují v záložce Oprávnění příslušných objektů (například Oprávnění, viz: Popis záložky Oprávnění).

Při nastavování oprávnění pro jednotlivé operace se vychází ze skupin uživatelů.

4) Přihlašování lokálních uživatelů aplikace (ověření identity lokálního uživatele).
5) Přihlašování síťových uživatelů aplikace (ověření identity síťového uživatele).
6) Ověření oprávnění přihlášeného uživatele k provedení chráněné operace.

Přihlašování lokálních uživatelů aplikace (ověření identity lokálního uživatele)

Obsluha spuštěné lokální aplikace se může pomocí prostředků PROMOTIC přihlásit jako lokální uživatel aplikace pod přiděleným jménem a heslem, a tím získat příslušná oprávnění podle svého zařazení ve skupinách uživatelů. Ve spuštěné aplikaci se lokální uživatel může přihlásit z nástrojové lišty PROMOTIC nebo může projektant aplikace připravit jiný mechanismus aktivace lokálního přihlášení (jde o vyvolání metody Pm.WndLogon nebo Pm.Logon).

Přihlášení lokálního uživatele se jako celek buď povede nebo nepovede. Pokud se povede, pak je odhlášen původní lokální uživatel a přihlášen nový lokální uživatel. Pokud se nepovede, pak zůstane přihlášený původní lokální uživatel.

 
Systémový náhradní nepřihlášený lokální uživatel $NOUSER_LOCAL:

Při odhlášení lokálního uživatele je automaticky přihlášen uživatel $NOUSER_LOCAL, představující odhlášeného (nepřihlášeného) lokálního uživatele. Tím je zajištěno, že v systému je vždy přihlášen některý z lokálních uživatelů (skutečný nebo náhradní). Uživatel $NOUSER_LOCAL je v aplikaci vždy přítomen, nelze jej smazat ani přejmenovat, ale lze konfigurovat jeho obsah. Uživatel $NOUSER_LOCAL je normálním uživatelem, z hlediska konfigurace členství ve skupinách uživatelů (používaných k ověřování oprávnění) a nastavení priority. Lze jej zařadit do kteréholiv skupiny uživatelů a tak zajistit určité výchozí oprávnění i pro nepřihlášeného uživatele.

 
Objekt User v lokální aplikaci:

V běžící aplikaci existuje trvale jeden objekt typu User, reprezentující právě přihlášeného lokálního uživatele. Tento objekt si jednak drží runtime informace přihlášeného uživatele (například privátní data uživatele) a také si drží odkaz na konfiguraci odpovídajícího lokálního uživatele (například jméno, členství ve skupinách uživatelů, priorita) (viz Uživatelé). V případě odhlášeného lokálního uživatele si drží odkaz na uživatele $NOUSER_LOCAL. Při ověřování oprávnění operace v lokální aplikaci se použije tento objekt User (právě přihlášený skutečný nebo náhradní lokální uživatel). Operace je provedena jen pokud tento uživatel (User) splní požadované oprávnění. Jinak je zamítnuta s příslušným upozorněním.

Přihlašování síťových uživatelů aplikace (ověření identity síťového uživatele)

Přihlašovací jméno a heslo se zasílá s každým síťovým požadavkem. Pokud je vzdáleným klientem Web prohlížeč (Chrome, Firefox, Edge, InternetExplorer ..) a zobrazují se HTML stránky generované objektem PmWeb, pak je uživatel při pokusu o zobrazení chráněné stránky vyzván standardním oknem k zadání jména síťového uživatele a hesla, které jsou automaticky zaslány aplikaci PROMOTIC s požadavkem. Pokud je hlavním oknem síťové aplikace pracovní plocha (PmWorkspace), pak se obsluha spuštěné síťové aplikace může pomocí prostředků PROMOTIC přihlásit jako síťový uživatel aplikace pod přiděleným jménem a heslem, a tím získat příslušná oprávnění podle svého zařazení ve skupinách uživatelů. Pokud je vzdáleným klientem klient aplikace PROMOTIC, pak se jméno síťového uživatele a heslo zadává přímo v jednotlivých komponentách, které umožňují napojení na vzdálenou Web server komponentu (například v parametrech metody PmData.ReadFromWeb, v konfigurátoru Parametry pro typ: Vzdálené napojení přes Web, atd.). PROMOTIC Web server si také automaticky zjistí IP adresu vzdáleného klienta. PROMOTIC pak použije jméno, heslo a IP adresu síťového uživatele k ověření oprávnění pro danou operaci.
 
Systémový náhradní nepřihlášený síťový uživatel $NOUSER_NET:

Pokud přijde požadavek bez jména a hesla, pak bude automaticky přihlášen uživatel $NOUSER_NET, představující nepřihlášeného síťového uživatele. Tím lze zajistit, že každý vzdálený požadavek bude pod určitým přihlášeným síťovým uživatelem (skutečným nebo náhradním). Uživatel $NOUSER_NET je v aplikaci vždy přítomen, nelze jej smazat ani přejmenovat, ale lze konfigurovat jeho obsah. Uživatel $NOUSER_NET je normálním uživatelem, z hlediska konfigurace členství ve skupinách uživatelů (používaných k ověřování oprávnění) a nastavení priority. Lze jej zařadit do kteréholiv skupiny uživatelů a tak zajistit určité výchozí oprávnění i pro nepřihlášeného uživatele.

 
Striktní a nestriktní režim přihlašování:

Existují dva způsoby přihlašování síťových uživatelů do aplikace. Striktní a nestriktní režim viz konfigurátor "Striktní režim přihlašování síťových uživatelů do aplikace s nutností použít jméno a heslo". V případě striktního režimu nemá uživatel $NOUSER_NET vůbec smysl, protože striktní režim si vynutí přihlášení skutečného uživatele ještě před vlastním ověřením oprávnění. V případě nestriktního režimu se použije uživatel $NOUSER_NET pro každý síťový požadavek bez jména a hesla (nepřihlášený uživatel).

 
Vznik objektu User při vyhodnocování oprávnění požadavku:

Při vyhodnocování požadavku vznikne objekt typu User, reprezentující přihlášeného (nebo náhradního nepřihlášeného) uživatele. Tento objekt si jednak drží runtime informace přihlášeného uživatele (například privátní data uživatele) a také si drží odkaz na konfiguraci odpovídajících síťových uživatelů (jeden nebo dva) (například jméno, členství ve skupinách uživatelů, priorita) (viz Uživatelé). V případě nepřihlášeného síťového uživatele si drží odkaz na uživatele $NOUSER_NET. Při ověřování oprávnění operace v síťové aplikaci se použije tento objekt User (právě přihlášený nebo nepřihlášený síťový uživatel a případně uživatel zadaný IP adresou). Operace je provedena jen pokud tento uživatel (User) splní požadované oprávnění. Jinak je zamítnuta s příslušným upozorněním.

Existují dva druhy síťových uživatelů z hlediska způsobu jejich nakonfigurování:

1) Uživatelé se zadaným jménem a heslem (případně i s IP adresou). V nestriktním režimu sem spadá i nepřihlášený uživatel $NOUSER_NET.
2) Uživatelé jenom se zadanou IP adresou.

Důležité je, že síťový požadavek může současně odpovídat dvěma uživatelům. Jeden typu 1 (jméno a heslo) a druhý typu 2 (jenom IP adresa). Pokud požadavek spadá současně pod dva uživatele, pak při ověřování oprávnění stačí, když jeden z nich splní oprávnění. Objekt typu User, reprezentující přihlášeného (nebo náhradního nepřihlášeného) uživatele, si pak drží odkaz na konfiguraci obou odpovídajících síťových uživatelů. Vlastnosti a metody potom vracejí hodnoty různě upravené podle kontextu (důležitější z obou objektů, sloučení hodnot, atd.).

V aplikaci může být v danou chvíli přihlášeno několik síťových uživatelů současně (objekty typu User). Množství síťových uživatelů přihlášených na PROMOTIC serveru současně omezuje v zásadě pouze zakoupené licence pro určitý počet síťových klientů.

 
Podrobnější vysvětlení způsobu interakce při ověřování uživatele mezi klientem a serverem:
Pro klienta typu aplikace PROMOTIC platí, že každý požadavek je automaticky zaslán se zadaným jménem a heslem.
Pro klienta typu Web prohlížeč platí následující pravidla:
1) Buď je nebo není přihlášený (jménem a heslem) k PROMOTIC serveru.
2) Pamatuje si všechny navštívené stránky na serveru a při každém dalším přístupu na ně posílá automaticky spolu s požadavkem i jméno a heslo, pokud při posledním přístupu na ně bylo jméno a heslo vyžadováno (nečeká na odmítnutí s chybovým kódem 401-Unauthorized).
3) Při přístupu na dosud nenavštívenou stránku posílá nejprve požadavek bez jména a hesla.
4) Při přijetí odmítnutí požadavku serverem s chybovým kódem 401-Unauthorized (vyzvání serverem, ať klient dodá jméno a heslo):
a) Pokud je přihlášený k PROMOTIC serveru, pak vygeneruje automaticky nový požadavek včetně jména a hesla.
b) Pokud není přihlášený k PROMOTIC serveru, pak zobrazí standardní přihlašovací okno pro zadání jména a hesla a pak vygeneruje nový požadavek včetně jména a hesla.
 
Pro PROMOTIC server platí následující pravidla:
1) Zpracování požadavku bez dodaného jména a hesla se na PROMOTIC serveru liší podle toho, zda se jedná o striktní nebo nestriktní režim přihlašování (viz konfigurátor "Striktní režim přihlašování síťových uživatelů do aplikace s nutností použít jméno a heslo").
a) Pokud se jedná o striktní režim, pak při přijetí požadavku od vzdáleného klienta bez dodaného jména a hesla je požadavek ihned odmítnut s chybovým kódem 401-Unauthorized.
b) Pokud se jedná o nestriktní režim, pak při přijetí požadavku od vzdáleného klienta bez dodaného jména a hesla se provede ověření oprávnění operace s tím, co bylo dodáno (nepřihlášený uživatel $NOUSER_NET a IP adresa). Pokud je oprávnění dostatečné (bylo hlídano jen na IP adresu, povoleno všem pomocí skupiny $ANY/$ANY_NET nebo nepřihlášený uživatel měl dostatečná oprávnění), pak se provede operace a vytvoří se jeden objekt typu User, reprezentující přihlášeného síťového uživatele. Pokud není oprávnění dostatečné, pak je požadavek odmítnut s chybovým kódem 401-Unauthorized.
2) Zpracování požadavku s dodaným jménem a heslem. PROMOTIC server se pokusí najít síťového uživatele s odpovídajicím jménem a heslem (pokud má tento uživatel současně zapnuto i hlídání IP adresy tak i s odpovídající IP adresou). Bez ohledu, zda byl síťový uživatel podle jména a hesla nalezen, tak se PROMOTIC server ještě pokusí najít druhého síťového uživatele s odpovídajicí IP adresou (pokud existuje uživatel hlídaný pouze na IP adresu). Pak se provede autorizace oprávnění na tyto jednoho nebo dva nalezené uživatele (dle jména a dle IP adresy). Pokud je oprávnění některého z těchto dvou uživatelů dostatečné, pak se provede operace a vytvoří se jeden objekt typu User, reprezentující přihlášeného síťového uživatele.

Ověření oprávnění přihlášeného uživatele k provedení chráněné operace

Vlastní ověření oprávnění (nad objektem User) probíhá v těchto krocích:
1) Určení, zda požadavek na operaci vznikl lokálně nebo síťově.
2) Určení identifikátoru lokálního nebo síťového uživatele, který požadavek vyvolal. V případě kombinace síťového uživatele hlídaného jménem a heslem a síťového uživatele hlídaného IP adresou mohou být identifikátory dva.
3) Porovnání identifikátoru uživatele se skupinami uživatelů v oprávnění. Operace je povolena, pokud je uživatel členem některé z uvedených skupin uživatelů. V případě dvou identifikátorů uživatelů se porovnání provádí pro každý zvlášť a stačí, pokud je úspěšný aspoň jeden z nich.

Veškerá porovnávání, při hledání výskytu identifikátoru uživatele ve skupinách uživatelů, končí úspěchem ihned po nalezení skupiny uživatelů, ve které je uživatel členem. Pokud se projde naopak celý seznam a uživatel v něm není nalezen, pak hledání končí neúspěchem a operace není povolena.

Přehled systémových uživatelů a skupin uživatelů

Systémové skupiny uživatelů i systémoví uživatelé se z hlediska použití pro ověřování oprávnění neliší od normálních skupin uživatelů a normálních uživatelů. To znamená, že systémové skupiny uživatelů lze uvádět v oprávnění chráněné operace, zatímco systémové uživatele je možno vkládat do skupin uživatelů. Nedoporučuje se používaní skupin uživatelů $ANY, $ANY_LOCAL a $ANY_NET v oprávnění chráněných operací. Raději používat buď systémové skupiny uživatelů $OPER a $ADMIN a případně vlastní založené skupiny uživatelů. Zařazením uživatele $NOUSER_LOCAL nebo $NOUSER_NET do dané skupiny uživatelů, se při ověřování oprávnění, chráněné na danou skupinu uživatelů, nebude vyžadovat přihlášený uživatel (podobně jako při použití $ANY). Vyřazením uživatele $NOUSER_LOCAL nebo $NOUSER_NET z dané skupiny uživatelů, se při ověřování oprávnění, chráněné na danou skupinu uživatelů, bude vyžadovat přihlášený uživatel. Tento koncept umožňuje zařazováním a vyřazováním uživatelů $NOUSER_LOCAL a $NOUSER_NET do jednotlivých skupin uživatelů, měnit chování celé aplikace, aniž by se musely měnit jednotlivá oprávnění u chráněných operací. Naproti tomu při použití skupin uživatelů $ANY, $ANY_LOCAL a $ANY_NET v oprávnění chráněných operací nejde snadno změnit chování celé aplikace a je potom nutno oprávnění měnit na mnoha místech celé aplikace.

Poznámka! V lokální aplikaci je nutno zajistit, aby základní části aplikace, sloužící k zobrazení nabídek s volbou pro přihlášení lokálního uživatele, byly přístupné i nepřihlášenému uživateli. To proto, že v lokální aplikaci se ověření oprávnění provádí proti právě přihlášenému lokálnímu uživateli. Jedná se zejména o hlavní okno aplikace (PmWorkspace) a okno s nástrojovou lištou (PmPanel). Toto je zajišteno již při založení nové aplikace PROMOTIC, kdy u těchto objektů jsou přednastaveny některá oprávnění tak, že obsahují skupinu uživatelů $ANY_LOCAL. Takto je lokálnímu uživateli aplikace umožněno zobrazit část aplikace, umožňující jeho přihlášení. Pro síťové uživatele toto není zapotřebí, neboť Web prohlížeč sám zobrazí přihlašovací okno ve chvíli, kdy se přistoupí na chráněnou stránku.

 
Přehled systémových uživatelů a skupin uživatelů:
$ANY: systémová skupina uživatelů, představuje jakéhokoliv lokálního nebo síťového uživatele (přihlašený, nepřihlášený).
$ANY_LOCAL: systémová skupina uživatelů, představuje jakéhokoliv lokálního uživatele (přihlašený, nepřihlášený).
$ANY_NET: systémová skupina uživatelů, představuje jakéhokoliv síťového uživatele (přihlašený, nepřihlášený).
$ADMIN: systémová skupina uživatelů, představuje uživatele s administrátorskými právy.
$OPER: systémová skupina uživatelů, představuje uživatele s právem normální obsluhy.
$NOUSER_LOCAL: systémový uživatel, představuje nepřihlášeného lokálního uživatele.
$NOUSER_NET: systémový uživatel, představuje nepřihlášeného síťového uživatele.

Příklady použití

Uvedené příklady použití slouží jenom jako inspirace pro konkrétní použití uživatelů. Možností je mnohem více a jednotlivé způsoby lze značně kombinovat. Lze pracovat s nepřihlášenými uživateli, přihlášenými uživateli jménem a heslem, se vzdálenými uživateli na určité IP adrese, s konkrétními předem danými kombinacemi hlídaní na jméno, heslo a IP adresu současně (vyplní se v jednom uživateli) nebo s dynamicky vznikajícími kombinacemi uživatele, který se přihlásí jednak jménem a heslem z nějaké IP adresy (jeden uživatel jenom se jménem a heslem a druhý uživatel jenom s IP adresou) a tím je veden pod dvěmi konfiguračními uživateli současně a má práva obou (výsledná kombinace oprávnění tak může být mnohem vyšší).
 
Celá aplikace chráněná na přihlášení: K tomu účelu slouží striktní režim přihlašování (viz konfigurátor "Striktní režim přihlašování síťových uživatelů do aplikace s nutností použít jméno a heslo"). Ten zajistí, že všichni síťoví uživatelé musí být přihlášeni jménem a heslem. Nepřihlášený uživatel $NOUSER_NET nemá v tomto režimu smysl. V oprávněních se nedoporučuje používaní skupin uživatelů $ANY a $ANY_NET, které by nutnost přihlášení změkčily. Do síťové aplikace se Web prohlížeč přihlásí jenom jednou, potom na vyzvání pokaždé sám dodá jméno a heslo. Jedná se o doporučený režim aplikace.
 
Část aplikace nechráněná na přihlášení, další část (administrátorská) chráněná na přihlášení: K tomu účelu slouží nestriktní režim přihlašování (viz konfigurátor "Striktní režim přihlašování síťových uživatelů do aplikace s nutností použít jméno a heslo"). Nepřihlášeného uživatele $NOUSER_NET zařadíme do skupiny uživatelů $OPER (pro nechráněnou část aplikace), ale nezařadíme do skupiny uživatelů $ADMIN. Tak je zajištěno, že do normálních částí aplikace, chráněných oprávněním na skupinu uživatelů $OPER, se síťový uživatel dostane i bez přihlášení. Při pokusu o přístup do administrátorských částí aplikace, chráněných oprávněním na skupinu uživatelů $ADMIN, se síťový uživatel bude muset přihlásit.
 
Celá aplikace nechráněná na přihlášení: K tomu účelu slouží nestriktní režim přihlašování (viz konfigurátor "Striktní režim přihlašování síťových uživatelů do aplikace s nutností použít jméno a heslo"). Nepřihlášeného uživatele $NOUSER_NET zařadíme do skupin uživatelů $OPER a $ADMIN. Tak je zajištěno, že do normálních i administrátorských částí aplikace se síťový uživatel dostane bez přihlášení.
 
Část aplikace chráněná na přístup uživatelů z daných IP adres, další část (administrátorská) chráněná na přihlášení: K tomu účelu slouží nestriktní režim přihlašování (viz konfigurátor "Striktní režim přihlašování síťových uživatelů do aplikace s nutností použít jméno a heslo"). Nepřihlášeného uživatele $NOUSER_NET nezařadíme do žádné skupiny uživatelů. Vytvoříme síťové uživatele pro konkrétní IP adresy a zařadíme je do skupiny uživatelů $OPER. Tak je zajištěno, že do normálních částí aplikace se síťový uživatel z daných IP adres dostane bez přihlášení. Do administrátorských částí aplikace se síťový uživatel bude muset přihlásit.
 
Administrátorská část aplikace chráněná na přihlášení z dané IP adresy: Vytvoříme síťové uživatele s administrátorskými právy se zapnutým přihlašováním jménem i kontrolou na IP adresu a zařadíme je do skupiny uživatelů $ADMIN. Tak je zajištěno, že do administrátorských částí aplikace se síťový uživatel dostane s přihlášením a z dané IP adresy.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice