Optimální role

Upravit obsah stránky

Jedná se o rozšíření systému rolí aplikace flexideo o tzv. dodatečné role. Atribut opt-roles speciální atribut, který lze použít u některých požadavků k určení optimálních rolí vhodných pro jeho provedení. Tento atribut rozšiřuje výchozí roli uživatele tak, že může, v závislosti na konkrétních potřebách, jednat jako člen další role. Role k nímž má uživatel přístup mohou (ale nemusí) být opakovatelnou oblastí uživatele. Pokud tato oblast u uživatele uvedena není, pak se rozšířené role v té konkrétní implementaci neuplatňují.

Obsah atributu opt-roles

Atribut opt-roles je čárkami odděleným seznamem vhodných rolí k provedení požadavku. Seznam rolí je chápán, jako seřazený podle priority, tedy první role je nejvhodnější, druhá je druhá nejvhodnější a tak dále. Zvláštní hodnotou atributu je klíčové slovo default, to zajistí, že je vždy použita výchozí role uživatele.

Příklad

opt-roles="2,4,7"

Průběh zpracování atributu opt-roles

Atribut opt-roles je zpracováván ve třech krocích a to následujícím způsobem:
    bullet

    Je-li hodnota atributu default, je zvolena výchozí role uživatele.

    bullet

    Je hledána první role uvedená v atributu, které je zároveň členem i uživatel (výchozí role uživatele je brána jako jedna z rolí, jíž je členem)

    bullet

    Není-li nalezena, je zvolena výchozí role uživatele

Příklady

V požadavku je uveden atribut opt-roles="2,4,7".
    bullet

    Uživatel má výchozí roli 10 a dodatečné role 7 a 8. Bude vybrána role 7 (jako prvni shoda s attributem, pravidlo 2)

    bullet

    Uživatel má výchozí roli 10 a dodatečné role 8 a 9. Bude vybrána role 10 (jako jeho výchozí role, pravidlo 3)

    bullet

    Uživatel má výchozí roli 2 a dodatečné role 4 a 7. Bude vybrána role 2 (jako prvni shoda s attributem, pravidlo 2)

    bullet

    Uživatel má výchozí roli 7 a dodatečné role 2 a 4. Bude vybrána role 2 (jako prvni shoda s attributem, pravidlo 2)

    bullet

    Uživatel má výchozí roli 7 a dodatečné role 3 a 4. Bude vybrána role 4 (jako prvni shoda s attributem, pravidlo 2)

Požadavky, ve kterých lze použít atribut opt-roles

Atribut opt-roles je možno použít v řadě požadavků, způsob chování (zpracování) atributu je velmi podobný, přesto jsou zde drobné rozdíly, které jsou blíže popsány níže. Začněme tedy prostým seznamem požadavků, kde je atribut přípustný:
    bullet

    request

    bullet

    get-document

    bullet

    save-document

    bullet

    get-history

    bullet

    get-pseudo-document

    bullet

    save-pseudo-document

    bullet

    sql-query

    bullet

    transform

    bullet

    action

    bullet

    register

    bullet

    max-key

    bullet

    send-email

    bullet

    drop-email

    bullet

    do-action

    bullet

    do-request

    bullet

    do-export

    bullet

    do-import

    bullet

    Autentifikační řetězec přiložených souborů

AD request

Nastavuje optimální role pro všechny synovské uzly (požadavky). Význam kaskádového zpracování je vysvětlen ve zvláštní kapitole.

AD get-document, get-pseudo-document

U těchto požadavků je možné použít atribut jak v těle požadavku, tak v synovském uzlu document. Význam kaskádového zpracování je vysvětlen ve zvláštní kapitole. Při používání kombinací požadavků s vícero atributy opt-role je vhodné rovněž prostudovat kapitolu věnující se optimalizaci při práci s dodatečnými rolemi.

AD save-document, save-pseudo-document

Zde je možno použít atribut pouze v těle požadavku. Je-li potřeba během jednoho requestu ukládat pod vícero rolemi, je nutno zadat více save-document, resp. save-pseudo-document požadavků.

AD get-history

Zde je možno zadat atribut buď do těla požadavku, nebo do možných synovských tagů list a document. Význam kaskádového zpracování je vysvětlen ve zvláštní kapitole. Při používání kombinací požadavků s vícero atributy opt-role je vhodné rovněž prostudovat kapitolu věnující se optimalizaci při práci s dodatečnými rolemi.

AD sql-query

Zde je možno zadat atribut buď do těla požadavku, nebo do jeho synovských tagů zpravidla select. Význam kaskádového zpracování je vysvětlen ve zvláštní kapitole. Při používání kombinací požadavků s vícero atributy opt-role je vhodné rovněž prostudovat kapitolu věnující se optimalizaci při práci s dodatečnými rolemi.

AD transform, action

U požadavku action je zvolená role použita k zajištění přístupu k akci přes systém práv z registru akcí. U obou požadavků se atribut opt-roles vztahuje především ke tvořeným požadavkům, předávaným serveru. Umožňuje tak zvolit roli, pod kterou budou následně transformacemi vytvořené požadavky provedeny. To však těmto tvořeným požadavkům nebraní opět zvolit roli pomocí nasledného, čí následných atributů opt-roles. Význam kaskádového zpracování je vysvětlen ve zvláštní kapitole.

AD register

Umožňuje zvolit doporučenou roli pro následně prováděný registrovaný požadavek. Stejného výsledku lze dosáhnout vložením atributu přímo do registrovaného požadavku. Význam kaskádového zpracování je vysvětlen ve zvláštní kapitole.

AD max-key

Umožňuje vybrat vhodnou roli tak, aby měla přístup k příslušnému dokumentu.

AD send-email, drop-email

Zde je atribut pouze využíván k zajištění přístupu k emailovému profilu. Lze tak například definovat odesílací roli a její člšnové tak pak mohou odesílat maily.

AD do-action, do-request

Atribut je možné zadat do těla požadavku. Atribut je využíván podobně, jako u požadavků transform a action. Slouží tedy především k nastavení doporučené role pro následné požadavky. Ani zde tento postup nebrání následnému použití dalších atributů opt-roles. Stejně jako u požadavku action, je i zde doporučená role použita při získávání opravnění z registru akcí. Význam kaskádového zpracování je vysvětlen ve zvláštní kapitole.

AD do-export

Atribut je možno zadat do těla požadavku, nebo do jednotlivých tagů s exportními dotazy. Atribut slouží pro nastavení optimální role pro provádění dotazů, které se stanou zdrojem pro export. Při používání kombinací požadavků s vícero atributy opt-role je vhodné rovněž prostudovat kapitolu věnující se optimalizaci při práci s dodatečnými rolemi.

AD do-import

Atribut je možno zadat pouze do těla požadavku. Atribut slouží pouze jako rozšířený zdroj oprávnění uživatele pro provedení importu.

Kaskádové zpracovávání dodatečných rolí

Jak již bylo naznačeno výše, atributy opt-roles je možné kaskádovat. Pro každý požadavek tedy platí ten opt-roles atribut, který je uveden hierarchicky nejblíže nad ním.

Příklad:

 <request opt-roles="1,2,3">
    <sql-query>
        <select>
              "Zde platí opt-roles="1,2,3""
        </select>
    </sql-query>
    
    "Zde by pro požadavky platil opt-roles="1,2,3""
    
    <sql-query opt-roles="4,5,6">
        <select>
            "Zde platí opt-roles="4,5,6""
        </select>
        <select>
            "Zde platí opt-roles="4,5,6""
        </select>
        <select opt-roles="7">
            "Zde platí opt-roles="7""
        </select>
         <select>
            "Zde platí opt-roles="4,5,6""
        </select>
    </sql-query>

    "Zde by pro požadavky platil opt-roles="1,2,3""
    
    <transform opt-roles="4,7">
        "Zde se pro prováděné požadavky zdědí opt-roles z tagu transform, tedy opt-roles="4,7""
    </transform>

    "Zde by pro požadavky platil opt-roles="1,2,3""
    
    <action>
        "Zde se pro prováděné požadavky zdědí opt-roles z tagu request, tedy opt-roles="1,2,3""
    </action>
</request>
Takto napsaný požadavek by byl značně neoptimální, viz další kapitola.

Optimalizace pri práci s dodatečnými rolemi

Každá změna role vede k opětovnému přihlášení k databázi, každé takové přihlášení je spojené s jistými náklady, zejména časovými. Proto je vhodné, je-li to možné, požadavky, které budou prováděny pod stejnou rolí seskupovat. K opětovnému přihlášení dochází při každé změně role, bez ohledu na to, v jaké hloubce ke změně dojde. U požadavků do-... nedochází k přímé změne role, role se mění až v okamžiku jeho vykonávání, takže tato kapitola se jej týká jen do té míry, že opět při jeho vykonávaání je vhodné kumulovat stejným způsobem. Viz následující příklady.

Příklad 1 (srovnání dvou možností)

Následující kaskádu požadavků
 <sql-query>
    <select opt-roles="2,3,4">...</select>
    <select opt-roles="5,6,7">...</select>
    <select opt-roles="2,3,4">...</select>
    <select opt-roles="5,6,7">...</select>
</sql-query>
je mnohem vhodnější provést takto
 <sql-query>
    <select opt-roles="2,3,4">...</select>
    <select opt-roles="2,3,4">...</select>
    <select opt-roles="5,6,7">...</select>
    <select opt-roles="5,6,7">...</select>
</sql-query>
.

Příklad 2 (skrytá změna role)

 <request>
    <sql-query opt-roles="2,3,4">
        <select>...</select>
        <select>...</select>
        <select>...</select>
        <select>...</select>
    </sql-query>
    <action>
        Kdesi (hluboko) v těle akce se vyskytne opt-roles="5,6,7"
    </action>
    <sql-query opt-roles="2,3,4">
        <select>...</select>
        <select>...</select>
        <select>...</select>
        <select>...</select>
    </sql-query>
</request>
Je opět vhodnější zapsat tak, aby akce která změnu role vyvolá, byla buď na začátku, nebo na konci.
 <request>
    <sql-query opt-roles="2,3,4">
        <select>...</select>
        <select>...</select>
        <select>...</select>
        <select>...</select>
    </sql-query>
    <sql-query opt-roles="2,3,4">
        <select>...</select>
        <select>...</select>
        <select>...</select>
        <select>...</select>
    </sql-query>
    <action>
        Kdesi (hluboko) v těle akce se vyskytne opt-roles="5,6,7"
    </action>
</request>

Příklad 3 (zde ke změně role nedochází)

 <request>
    <sql-query opt-roles="2,3,4">
        <select>...</select>
        <select>...</select>
        <select>...</select>
        <select>...</select>
    </sql-query>
    <do-action opt-roles="5,6,7">...</do-action>
    <sql-query opt-roles="2,3,4">
        <select>...</select>
        <select>...</select>
        <select>...</select>
        <select>...</select>
    </sql-query>
</request>

Dodatečné role pří práci s přiloženými soubory

Optimální role je možné uvádět i v autentifikačním řetězci používaném pro stahování přiložených souborů. V takovém případě se opět použije příslušně (stejně jako u atributu opt-roles) zvolená role k ověření práva přístupu k požadovanému souboru. V autentifikačním řetězci se jako název součásti nepoužívá opt-roles, ale pouze roles, jako oddělovač rolí se nepoužívá znak čárky, ale znak pomlčky. Řetězec je na běžný autentifikační řetězec navazován stejně, jako jeho ostatní části, tedy znakem tilda.

Příklad

puvodni_auth_retezec~roles=2-3-4


Implementace Optimální role