Zabezpečení před neoprávněným přístupem ke stránce nebo její části

JellyPot umí zabezpečit stránku nebo její část před neoprávněným přístupem. Jinými slovy, aby se uživateli stránka nebo její část zobrazila, uživatel musí být přihlášený a patřit do správné skupiny uživatelů. Toho se využívá, pokud některé informace na webu mají být skryté široké veřejnosti, ale vybraní uživatelé k nim po přihlášení přístup mít mají; může se hodit třeba pro předplatitele, obchodní partnery apod.

Toto je nezávislé na zabezpečení před neoprávněným přístupem do administrace nebo k souboru.

Neoprávněný přístup ke stránce

Nemá-li návštěvník oprávnění pro přístup ke stránce, je přesměrován na stránku obsahující buď přihlašovací formulář nebo na stránku s hlášením o nedostatečném oprávnění.

Pro zabezpečení před neoprávněným přístupem ke stránce se používá control <je:securePage> ve spojení s polem typu <UserGroups>.

Neoprávněný přístup k části stránky

Nemá-li návštěvník oprávnění pro přístup na část stránky, pak se mu nezobrazí jen tato část. Zbytek stránky je mu dostupný. Nemusí tedy vůbec poznat, že mu něco zůstalo zatajeno.

Pro zabezpečení před neoprávněným přístupem k části stránky se používá control <je:secureRegion> ve spojení s polem typu <UserGroups>.

Příklad

Máme web, na kterém publikujeme články. Chceme, aby některé z nich byly přístupné pouze předplatitelům – a některé dokonce jen VIP předplatitelům.

Site.config si v části UserGroupSets tedy zavedeme uživatelské skupiny: budeme potřebovat uživatele bez předplatného (k tomu použijeme systémovou skupinu uživatelů Anybody) a dvě úrovně předplatitelů (k tomu si definujeme skupiny subscribersubscriberVip). Ty sdružíme do sady Visitors a tu následně použijeme v poli typu <UserGroups> datového typu ArticleItem, který představuje jeden článek. V Site.config tedy budeme mít následující:

...
<UserGroupSets>
    <SysUserGroup name="anybody" title="Anybody" />
    <UserGroup name="subscriber" title="Subscriber" />
    <UserGroup name="subscriberVip" title="VIP Subscriber" />
    <Set name="Visitors" members="anybody, subscriber, subscriberVip" />
</UserGroupSets>
...
<Vars>
    <Collection name="article" type="ArticleItem" />
</Vars>
...
<Types>
    <Type name="ArticleItem">
        <SimpleText name="title" />
        <Text name="text" />
        <UserGroups name="allowAccessFor" set="Visitors" />
    </Type>
</Types>
...

Teď už můžeme vytvořit šabony pro výpis přehledu článků i pro samotný článek. Začneme přehledem:

...
<je:repeater runat="server" source="article">
    <item>
        <je:secureRegion runat="server"
                         visibleFor=".allowAccessFor">
            <je:aVar runat="server" href="/en/article.aspx">
                <je:item runat="server"
                         field=".title"
                         tag="h2" />
                <je:item runat="server"
                         field=".text"
                         tag="p"
                         format="length: 300" />
            </je:aVar>
        </je:secureRegion>
        <je:secureRegion runat="server"
                         hiddenFor=".allowAccessFor">
            <span>Subscribers only!</span>
            <je:item runat="server"
                     field=".title"
                     tag="h2" />
            <je:item runat="server"
                     field=".text"
                     tag="p"
                     format="length: 300" />
        </je:secureRegion>
    </item>
</je:repeater>
...

Proč jsme pro výpis použili dva controly <je:secureRegion> za sebou? V přehledu článků chceme vypsat vždy všechny, aby nepředplatitelé věděli, o které přichází. A aby si je nemohli rozkliknout, prostě je vypíšeme bez odkazu na detail. Kdybychom je vůbec nechtěli ukázat, použili bychom atribut itemsVisibleFor controlu <je:repeater>, v našem případě tedy:

...
<je:repeater runat="server" source="article" itemsVisibleFor="allowAccessFor">
    ...
</je:repeater>
...

Ještě musíme ošetřit situaci, kdy se nepředplatitel nějak dostane k odkazu na článek přístupný jen předplatitelům. K tomu použijeme control <je:securePage> přímo v .aspx šabloně článku:

<%@ Page %>
<je:container runat="server" expect="article">
    <je:securePage runat="server"
                   visibleFor=".allowAccessFor" />
    <html>
        <head>
            <je:item runat="server" field=".title" tag="title" />
        </head>
        <body>
            <je:item runat="server" field=".title" tag="h1" />
            <je:item runat="server" field=".text" />
        </body>
    </html>
</je:container>

Pokud by články obsahovaly i obrázky nebo třeba soubory ke stažení a ty bychom také chtěli zabezpečit před neoprávněným přístupem, použili bychom postupy popsané v Zabezpečení před neoprávněným přístupem k souboru nebo obrázku.

Připomínky a postřehy

Máte-li nějakou připomínku, dobrý nápad nebo jste našli v dokumentaci chybu, rádi od vás uslyšíme.