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. Vznikne-li požadavek (lokální nebo síťový) na chráněnou operaci, operace bude provedena, pouze pokud má příslušný uživatel požadované oprávnění. Pokud požadované oprávnění nemá, operace selže s chybovým hlášením.
 

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

1) Definice seznamu skupin uživatelů aplikace, umožňující 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) Definice seznamu uživatelů aplikace, umožňující 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) Definice oprávnění u chráněných operací aplikace, umožňující chránit kritické části aplikace před neoprávněným vstupem obsluhy 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, je odhlášen původní lokální uživatel a přihlášen nový lokální uživatel. Pokud se nepovede, tak 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 pouze 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. Je-li vzdáleným klientem Web prohlížeč (InternetExplorer, Firefox, Chrome...) 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. Je-li hlavním oknem síťové aplikace pracovní plocha (PmWorkspace), potom 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ů. Je-li vzdáleným klientem PROMOTIC klient aplikace, 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, potom 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 síťovým přihlášený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 pouze 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, tak 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 Internet Explorer platí následující pravidla:

1) Internet Explorer buď je nebo není přihlášený (jménem a heslem) k PROMOTIC serveru.
2) Internet Explorer si pamatuje 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) Internet Explorer při přístupu na dosud nenavštívenou stránku posílá nejprve požadavek bez jména a hesla.
4) Internet Explorer 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 Internet Explorer přihlášený k PROMOTIC serveru, vygeneruje automaticky nový požadavek včetně jména a hesla.
b) Pokud není Internet Explorer přihlášený k PROMOTIC serveru, 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 klienta typu PROMOTIC komponenta platí, že každý požadavek je automaticky zaslán se zadaným jménem a heslem.
 
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). V případě, že 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í), provede se 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é 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é, provede se 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čí, když 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. Projde-li se naopak celý seznam a uživatel v něm není nalezen, 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ů. Tzn. ž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 ž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ť Internet Explorer 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 lokálního nepřihlášeného uživatele.
$NOUSER_NET: systémový uživatel, představuje síťového nepřihlášené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ějáké 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