Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve webové aplikaci, která umožňuje uživatelům upravovat data, můžou mít různé uživatelské účty různá oprávnění pro úpravy dat. V tomto kurzu se podíváme, jak dynamicky upravit možnosti úprav dat na základě navštíveného uživatele.
Úvod
Řada webových aplikací podporuje uživatelské účty a na základě přihlášeného uživatele poskytuje různé možnosti, zprávy a funkce. V našich kurzech bychom například mohli chtít uživatelům z dodavatelů umožnit přihlášení na web a aktualizaci obecných informací o svých produktech – jejich jména a množství na jednotku , možná – spolu s informacemi o dodavateli, jako je název společnosti, adresa, kontaktní osoba atd. Kromě toho můžeme chtít zahrnout některé uživatelské účty pro lidi z naší společnosti, aby se mohli přihlásit a aktualizovat informace o produktech, jako jsou jednotky na skladě, změna pořadí atd. Naše webová aplikace může také umožnit anonymním uživatelům, aby navštívili (osoby, které nejsou přihlášené), ale omezily by je jenom na prohlížení dat. U takového systému uživatelských účtů bychom chtěli, aby datové webové ovládací prvky na našich ASP.NET stránkách nabízely možnosti vkládání, úprav a odstraňování, které jsou vhodné pro aktuálně přihlášeného uživatele.
V tomto kurzu se podíváme, jak dynamicky upravit možnosti úprav dat na základě navštíveného uživatele. Konkrétně vytvoříme stránku, která zobrazí informace o dodavatelích v upravitelném prvku DetailsView spolu s Objektem GridView se seznamem produktů poskytovaných dodavatelem. Pokud uživatel, který stránku navštíví, pochází z naší společnosti, může: zobrazit jakékoli informace o dodavateli; upravit jejich adresu; a upravte informace o jakémkoli produktu poskytnutém dodavatelem. Pokud je ale uživatel od určité společnosti, může zobrazit a upravit pouze své vlastní informace o adrese a může upravovat jenom produkty, které nebyly označeny jako ukončené.
Obrázek 1: Uživatel z naší společnosti může upravit jakékoli informace o dodavateli (kliknutím zobrazíte obrázek v plné velikosti).
Obrázek 2: Uživatel od konkrétního dodavatele může zobrazit a upravit pouze své informace (kliknutím zobrazíte obrázek v plné velikosti).
Pojďme začít!
Poznámka:
systém členství ASP.NET 2.0 poskytuje standardizovanou, rozšiřitelnou platformu pro vytváření, správu a ověřování uživatelských účtů. Protože zkoumání systému členství je nad rámec těchto kurzů, tento kurz místo toho simuluje členství tím, že umožňuje anonymním návštěvníkům vybrat, zda jsou z konkrétního dodavatele nebo z naší společnosti. Další informace o členství najdete v mé sérii článků o členství, rolích a profilech v ASP.NET 2.0 .
Krok 1: Povolení zadání přístupových práv uživateli
V reálné webové aplikaci by informace o účtu uživatele zahrnovaly, jestli pracoval pro naši společnost nebo pro konkrétního dodavatele, a tyto informace by byly programově přístupné z našich ASP.NET stránek, jakmile se uživatel přihlásí k webu. Tyto informace je možné zachytit prostřednictvím systému rolí ASP.NET 2.0, jako informace o účtu na úrovni uživatele prostřednictvím systému profilů nebo prostřednictvím některých vlastních prostředků.
Vzhledem k tomu, že cílem tohoto kurzu je předvést úpravu možností úprav dat na základě přihlášeného uživatele a nemá za cíl prezentovat ASP.NET 2.0 členství, rolí a profilových systémů, použijeme velmi jednoduchý mechanismus k určení možností pro uživatele, který navštíví stránku – rozevírací seznam, ze kterého může uživatel určit, jestli by měl mít možnost zobrazit a upravit některé z informací o dodavatelích, nebo, případně informace o konkrétních dodavateli, které můžou zobrazit a upravit. Pokud uživatel zjistí, že může zobrazit a upravit všechny informace o dodavateli (výchozí nastavení), může procházet všechny dodavatele, upravovat informace o adrese libovolného dodavatele a upravovat název a množství na jednotku pro jakýkoli produkt poskytnutý vybraným dodavatelem. Pokud uživatel zjistí, že může zobrazit a upravit pouze konkrétního dodavatele, může zobrazit pouze podrobnosti a produkty pro daného dodavatele a může aktualizovat pouze název a množství informací o jednotlivých jednotkách pro tyto produkty, které nejsou ukončeny.
Naším prvním krokem v tomto návodu je vytvořit tento rozevírací seznam a naplnit ho dodavateli v systému.
UserLevelAccess.aspx Otevřete stránku ve EditInsertDelete složce, přidejte DropDownList, jehož ID vlastnost je nastavena na Suppliers, a vytvořte vazbu tohoto DropDownList na nový ObjectDataSource pojmenovaný AllSuppliersDataSource.
Obrázek 3: Vytvoření nového objektu ObjectDataSource s názvem AllSuppliersDataSource (kliknutím zobrazíte obrázek s plnou velikostí)
Vzhledem k tomu, že chceme, aby tento DropDownList zahrnoval všechny dodavatele, nakonfigurujte ObjectDataSource tak, aby vyvolal metodu SuppliersBLL třídy GetSuppliers(). Také se ujistěte, že metoda ObjectDataSource s Update() je mapována na metodu třídy SuppliersBLL s UpdateSupplierAddress, protože tento ObjectDataSource bude také používán v režimu DetailsView, který budeme přidávat v kroku 2.
Po dokončení průvodce ObjectDataSource dokončete kroky konfigurací Suppliers DropDownList tak, aby zobrazoval CompanyName datové pole a používá SupplierID datové pole jako hodnotu pro každý ListItem.
Obrázek 4: Konfigurace rozevíracího Suppliers seznamu tak, aby používala CompanyName pole a SupplierID datová pole (kliknutím zobrazíte obrázek v plné velikosti)
V tomto okamžiku rozevírací seznam uvádí názvy společností dodavatelů v databázi. Musíme ale také do rozevíracího seznamu zahrnout možnost Zobrazit/upravit všechny dodavatele. Chcete-li toho dosáhnout, nastavte vlastnost Suppliers u AppendDataBoundItems DropDownList na true a pak přidejte ListItem, u kterého je vlastnost Text „Show/Edit ALL Suppliers“ a jeho hodnota je -1. To lze přidat přímo prostřednictvím deklarativní značky nebo prostřednictvím Návrháře tak, že přejdete do okna Vlastnosti a kliknete na tři tečky ve vlastnosti DropDownList s Items .
Poznámka:
Podrobnější diskuzi o přidání položky Vybrat vše do datově svázaného rozbalovacího seznamu najdete v kurzu Master/Detail Filtering With a DropDownList.
Po nastavení AppendDataBoundItems vlastnosti a přidání ListItem by deklarativní značkování DropDownListu mělo vypadat takto:
<asp:DropDownList ID="Suppliers" runat="server" AppendDataBoundItems="True"
DataSourceID="AllSuppliersDataSource" DataTextField="CompanyName"
DataValueField="SupplierID">
<asp:ListItem Value="-1">Show/Edit ALL Suppliers</asp:ListItem>
</asp:DropDownList>
Obrázek 5 ukazuje snímek obrazovky zobrazující náš aktuální pokrok při prohlížení v prohlížeči.
Obrázek 5: Suppliers Rozevírací seznam obsahuje položku 'Zobrazit všechny' ListItem, a navíc jednu položku pro každého dodavatele (kliknutím zobrazíte obrázek v plné velikosti).
Vzhledem k tomu, že chceme aktualizovat uživatelské rozhraní ihned po změně výběru uživatele, nastavte Suppliers DropDownList vlastnost AutoPostBack na true. V kroku 2 vytvoříme ovládací prvek DetailsView, který zobrazí informace pro dodavatele na základě výběru DropDownList. Potom v kroku 3 vytvoříme obslužnou rutinu události pro tuto událost DropDownList SelectedIndexChanged , ve které přidáme kód, který vytvoří vazbu odpovídajících informací o dodavateli na DetailsView na základě vybraného dodavatele.
Krok 2: Přidání ovládacího prvku DetailsView
Pojďme použít DetailsView k zobrazení informací o dodavateli. Pro uživatele, který může zobrazit a upravit všechny dodavatele, bude DetailsView podporovat stránkování, což uživateli umožní procházet informace o dodavateli po jednom záznamu. Pokud uživatel pracuje pro konkrétního dodavatele, zobrazí Podrobnosti pouze informace o tomto konkrétním dodavateli a nebude obsahovat žádné stránkovací rozhraní. V obou případech musí DetailsView uživateli povolit úpravu adresy dodavatele, města a polí země.
Přidat DetailsView na stránku pod Suppliers DropDownList, nastavit jeho ID vlastnost na SupplierDetailsa vytvořit vazbu na AllSuppliersDataSource ObjectDataSource vytvořený v předchozím kroku. Dále zaškrtněte políčka 'Povolit stránkování' a 'Povolit úpravy' z chytrého štítku DetailsView.
Poznámka:
Pokud v inteligentní značce DetailsView nevidíte možnost Povolit úpravy, je to proto, že jste metodu ObjectDataSource s Update() nenamapovali na metodu SuppliersBLL třídy s UpdateSupplierAddress . Vraťte se zpět a proveďte tuto změnu konfigurace, po které by se měla v smart tagu DetailsView zobrazit možnost Povolit úpravy.
Vzhledem k tomu, že metoda třídy SuppliersBLL s UpdateSupplierAddress přijímá pouze čtyři parametry - supplierID, address, city a country - upravte BoundFields v DetailsView tak, aby CompanyName a Phone BoundFields byly pouze pro čtení. Kromě toho odeberte SupplierID BoundField úplně.
AllSuppliersDataSource A konečně ObjectDataSource má nyní jeho OldValuesParameterFormatString vlastnost nastavena na original_{0}. Chvíli odeberte toto nastavení vlastnosti z deklarativní syntaxe úplně nebo ho nastavte na výchozí hodnotu {0}.
Po dokončení konfigurace SupplierDetails DetailsView a AllSuppliersDataSource ObjectDataSource budeme mít následující deklarativní kód:
<asp:ObjectDataSource ID="AllSuppliersDataSource" runat="server"
SelectMethod="GetSuppliers" TypeName="SuppliersBLL"
UpdateMethod="UpdateSupplierAddress">
<UpdateParameters>
<asp:Parameter Name="supplierID" Type="Int32" />
<asp:Parameter Name="address" Type="String" />
<asp:Parameter Name="city" Type="String" />
<asp:Parameter Name="country" Type="String" />
</UpdateParameters>
</asp:ObjectDataSource>
<asp:DetailsView ID="SupplierDetails" runat="server" AllowPaging="True"
AutoGenerateRows="False" DataKeyNames="SupplierID"
DataSourceID="AllSuppliersDataSource">
<Fields>
<asp:BoundField DataField="CompanyName" HeaderText="Company"
ReadOnly="True" SortExpression="CompanyName" />
<asp:BoundField DataField="Address" HeaderText="Address"
SortExpression="Address" />
<asp:BoundField DataField="City" HeaderText="City"
SortExpression="City" />
<asp:BoundField DataField="Country" HeaderText="Country"
SortExpression="Country" />
<asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True"
SortExpression="Phone" />
<asp:CommandField ShowEditButton="True" />
</Fields>
</asp:DetailsView>
V tomto okamžiku lze DetailsView procházet a informace o adrese vybraného dodavatele lze aktualizovat bez ohledu na výběr provedený v rozevíracím Suppliers seznamu (viz obrázek 6).
Obrázek 6: Můžete zobrazit všechny informace o dodavatelích a jeho adresu aktualizovat (kliknutím zobrazíte obrázek v plné velikosti).
Krok 3: Zobrazení pouze informací o vybraném dodavateli
Naše stránka aktuálně zobrazuje informace pro všechny dodavatele bez ohledu na to, zda byl konkrétní dodavatel vybrán z rozevíracího Suppliers seznamu. Abychom mohli zobrazit jenom informace o dodavateli vybraného dodavatele, musíme na naši stránku přidat další ObjectDataSource, který načte informace o konkrétním dodavateli.
Přidejte na stránku nový ObjectDataSource a pojmenujte ho SingleSupplierDataSource. V inteligentní značce klikněte na odkaz Konfigurovat zdroj dat a použijte metodu SuppliersBLL třídy GetSupplierBySupplierID(supplierID) . Stejně jako AllSuppliersDataSource ObjectDataSource, má SingleSupplierDataSource ObjectDataSource Update() metodu namapovanou na metodu SuppliersBLL třídy UpdateSupplierAddress.
Obrázek 7: Konfigurace SingleSupplierDataSource ObjectDataSource pro použití GetSupplierBySupplierID(supplierID) metody (kliknutím zobrazíte obrázek s plnou velikostí)
Dále se zobrazí výzva k zadání zdroje parametrů pro GetSupplierBySupplierID(supplierID) vstupní parametr metody supplierID . Vzhledem k tomu, že chceme zobrazit informace pro dodavatele vybraného z DropDownList, použijte Suppliers vlastnost DropDownList s SelectedValue jako zdroj parametrů.
Obrázek 8: Použití rozevíracího SupplierssupplierID seznamu jako zdroje parametrů (kliknutím zobrazíte obrázek s plnou velikostí)
I s tímto druhým ObjectDataSource přidaným je ovládací prvek DetailsView aktuálně nakonfigurován, aby vždy používal AllSuppliersDataSource ObjectDataSource. Potřebujeme přidat logiku pro úpravu zdroje dat používaného objektem DetailsView v závislosti na Suppliers vybrané položce DropDownList. Chcete-li toho dosáhnout, vytvořte obslužnou rutinu SelectedIndexChanged události pro Supplier DropDownList. To lze nejjednodušeji vytvořit dvojklikem na DropDownList v Návrháři. Tato obslužná rutina události musí určit, jaký zdroj dat se má použít, a musí je znovu připojit k DetailsView. To se provádí pomocí následujícího kódu:
protected void Suppliers_SelectedIndexChanged(object sender, EventArgs e)
{
if (Suppliers.SelectedValue == "-1")
{
// The "Show/Edit ALL" option has been selected
SupplierDetails.DataSourceID = "AllSuppliersDataSource";
// Reset the page index to show the first record
SupplierDetails.PageIndex = 0;
}
else
// The user picked a particular supplier
SupplierDetails.DataSourceID = "SingleSupplierDataSource";
// Ensure that the DetailsView is in read-only mode
SupplierDetails.ChangeMode(DetailsViewMode.ReadOnly);
// Need to "refresh" the DetailsView
SupplierDetails.DataBind();
}
Obslužná rutina události začíná určením, zda byla vybrána možnost Zobrazit/Upravit VŠECHNY dodavatele. Pokud ano, nastaví SupplierDetails DetailsView s DataSourceID na AllSuppliersDataSource a vrátí uživatele k prvnímu záznamu v sadě dodavatelů tím, že nastaví vlastnost PageIndex na 0. Pokud však uživatel vybral konkrétního dodavatele z rozevíracího seznamu, DetailsView s DataSourceID je přiřazen k SingleSuppliersDataSource. Bez ohledu na to, jaký zdroj dat se používá, režim SuppliersDetails se vrátí do režimu jen pro čtení a data se napojí na DetailsView voláním metody SuppliersDetails ovládacího prvku DataBind().
Když je tato obslužná rutina události na místě, ovládací prvek DetailsView nyní zobrazuje vybraného dodavatele, pokud nebyla vybrána možnost Zobrazit/Upravit VŠECHNY dodavatele, v takovém případě je možné zobrazit všechny dodavatele prostřednictvím stránkovacího rozhraní. Obrázek 9 zobrazuje stránku s vybranou možností Zobrazit/Upravit všechny dodavatele; upozorňujeme, že stránkovací rozhraní je k dispozici, což uživateli umožňuje navštívit a aktualizovat libovolného dodavatele. Obrázek 10 ukazuje stránku s vybraným dodavatelem Ma Maison. V tomto případě lze zobrazit a upravit pouze informace Ma Maison s.
Obrázek 9: Všechny informace o dodavatelích lze zobrazit a upravit (kliknutím zobrazíte obrázek v plné velikosti).
Obrázek 10: Zobrazit a upravit pouze informace o vybraném dodavateli (kliknutím zobrazíte obrázek s plnou velikostí)
Poznámka:
Pro účely tohoto kurzu musí být ovládací prvky EnableViewState DropDownList i DetailsView nastaveny na true (výchozí), protože změny vlastností DropDownList s SelectedIndex a DetailsView s DataSourceID musí být zapamatovány napříč postbacky.
Krok 4: Výpis produktů dodavatelů v upravitelném objektu GridView
Po dokončení DetailsView je dalším krokem zahrnutí upravitelného objektu GridView se seznamem produktů poskytovaných vybraným dodavatelem. Tento objekt GridView by měl umožňovat úpravy pouze pro ProductName pole a QuantityPerUnit pole. Navíc pokud uživatel, který stránku navštíví, pochází od konkrétního dodavatele, měl by povolit pouze aktualizace těchto produktů, které nejsou ukončeny. Abychom toho dosáhli, musíme nejprve přidat přetížení metody ProductsBLL třídy UpdateProducts, která přebírá pouze pole ProductID, ProductName a QuantityPerUnit jako vstupy. Tento proces jsme si prošli předem v mnoha kurzech, takže se pojďme podívat na kód zde, který by se měl přidat do ProductsBLL:
[System.ComponentModel.DataObjectMethodAttribute(
System.ComponentModel.DataObjectMethodType.Update, false)]
public bool UpdateProduct(string productName, string quantityPerUnit, int productID)
{
Northwind.ProductsDataTable products = Adapter.GetProductByProductID(productID);
if (products.Count == 0)
// no matching record found, return false
return false;
Northwind.ProductsRow product = products[0];
product.ProductName = productName;
if (quantityPerUnit == null)
product.SetQuantityPerUnitNull();
else
product.QuantityPerUnit = quantityPerUnit;
// Update the product record
int rowsAffected = Adapter.Update(product);
// Return true if precisely one row was updated, otherwise false
return rowsAffected == 1;
}
S vytvořeným přetížením jsme nyní připraveni přidat ovládací prvek GridView a jeho přidružený ObjectDataSource. Přidejte na stránku nový Objekt GridView, nastavte jeho ID vlastnost na ProductsBySuppliera nakonfigurujte jej tak, aby používal nový ObjectDataSource s názvem ProductsBySupplierDataSource. Použijte metodu ProductsBLL třídy GetProductsBySupplierID(supplierID), protože chceme, aby GridView vypsal produkty podle vybraného dodavatele. Namapujte také metodu Update() na nové UpdateProduct přetížení, které jsme právě vytvořili.
Obrázek 11: Konfigurace ObjectDataSource pro použití právě vytvořené přetížení UpdateProduct (kliknutím zobrazíte obrázek plné velikosti)
Zobrazí se výzva k výběru zdroje parametrů pro GetProductsBySupplierID(supplierID) vstupní parametr metody supplierID . Vzhledem k tomu, že chceme zobrazit produkty pro dodavatele vybraného v DetailsView, použijte SuppliersDetails vlastnost DetailsView ovládacího prvku SelectedValue jako zdroj parametrů.
Obrázek 12: Použití SuppliersDetails vlastnosti DetailsView s SelectedValue jako zdroje parametrů (kliknutím zobrazíte obrázek v plné velikosti)
Vraťte se do GridView, odeberte všechna pole GridView s výjimkou ProductName, QuantityPerUnit a Discontinued, a označte Discontinued CheckBoxField jako jen pro čtení. Také zkontrolujte možnost Povolit úpravy ze Smart Tagu GridView. Po provedení těchto změn by deklarativní kód pro GridView a ObjectDataSource měl vypadat podobně jako následující:
<asp:GridView ID="ProductsBySupplier" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ProductsBySupplierDataSource">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="QuantityPerUnit" HeaderText="Qty/Unit"
SortExpression="QuantityPerUnit" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
ReadOnly="True" SortExpression="Discontinued" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ProductsBySupplierDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
SelectMethod="GetProductsBySupplierID" UpdateMethod="UpdateProduct">
<UpdateParameters>
<asp:Parameter Name="productName" Type="String" />
<asp:Parameter Name="quantityPerUnit" Type="String" />
<asp:Parameter Name="productID" Type="Int32" />
</UpdateParameters>
<SelectParameters>
<asp:ControlParameter ControlID="SupplierDetails" Name="supplierID"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Stejně jako u našeho předchozího ObjectDataSources je tato jedna OldValuesParameterFormatString vlastnost nastavena na original_{0}, což způsobí problémy při pokusu o aktualizaci názvu produktu nebo množství na jednotku. Odeberte tuto vlastnost z deklarativní syntaxe úplně nebo ji nastavte na výchozí hodnotu . {0}
Po dokončení této konfigurace teď naše stránka uvádí produkty poskytované dodavatelem vybraným v Objektu GridView (viz obrázek 13). V současné době je možné aktualizovat jakýkoli název produktu nebo množství na jednotku. Musíme ale aktualizovat logiku stránky tak, aby tyto funkce byly zakázány pro ukončené produkty pro uživatele spojené s konkrétním dodavatelem. V kroku 5 se budeme zabývat tímto posledním dílem.
Obrázek 13: Zobrazí se produkty poskytované vybraným dodavatelem (kliknutím zobrazíte obrázek s plnou velikostí).
Poznámka:
S přidáním této upravitelné GridView Suppliers DropDownList s SelectedIndexChanged obslužná rutina události by měla být aktualizována tak, aby vrátil GridView do stavu jen pro čtení. V opačném případě, pokud je v průběhu úprav informací o produktu vybrán jiný dodavatel, bude také možné upravit odpovídající index v objektu GridView pro nového dodavatele. Chcete-li tomu zabránit, jednoduše nastavte vlastnost EditIndex objektu GridView v obslužné rutině -1 události SelectedIndexChanged.
Připomínáme také, že je důležité povolit stav zobrazení GridView (výchozí chování). Pokud nastavíte vlastnost EnableViewState GridView na false, podstupujete riziko, že souběžní uživatelé neúmyslně odstraní nebo upraví záznamy.
Krok 5: Zakázání úprav ukončených produktů, pokud není vybrána možnost Zobrazit/Upravit všechny dodavatele
ProductsBySupplier I když je GridView plně funkční, v současné době uděluje příliš mnoho přístupu uživatelům, kteří jsou od konkrétního dodavatele. Podle našich obchodních pravidel by tito uživatelé neměli být schopni aktualizovat ukončené produkty. Abychom to vynutili, můžeme skrýt (nebo zakázat) tlačítko Upravit v těchto řádcích GridView s ukončenými produkty při návštěvě stránky uživatelem od dodavatele.
Vytvořte obslužnou rutinu události pro událost GridView s RowDataBound . V této obslužné rutině události musíme určit, zda je uživatel přidružený ke konkrétnímu dodavateli, který může být pro účely tohoto kurzu určen kontrolou vlastnosti Suppliers DropDownList SelectedValue - pokud je něco jiného než -1, pak je uživatel přidružený k určitému dodavateli. Pro takové uživatele pak musíme určit, jestli je produkt ukončen nebo ne. Můžeme získat odkaz na skutečnou ProductRow instanci vázanou na řádek GridView prostřednictvím e.Row.DataItem vlastnosti, jak je popsáno v tutoriálu Zobrazení souhrnných informací v zápatí GridView. Pokud je produkt vyřazen z nabídky, můžeme získat programový odkaz na tlačítko "Upravit" v GridView s polem příkazů CommandField pomocí technik probíraných v předchozím kurzu Přidání Client-Side Potvrzení Při Odstranění. Jakmile budeme mít odkaz, můžeme tlačítko skrýt nebo zakázat.
protected void ProductsBySupplier_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Is this a supplier-specific user?
if (Suppliers.SelectedValue != "-1")
{
// Get a reference to the ProductRow
Northwind.ProductsRow product =
(Northwind.ProductsRow)((System.Data.DataRowView)e.Row.DataItem).Row;
// Is this product discontinued?
if (product.Discontinued)
{
// Get a reference to the Edit LinkButton
LinkButton editButton = (LinkButton)e.Row.Cells[0].Controls[0];
// Hide the Edit button
editButton.Visible = false;
}
}
}
}
Když je tato obslužná rutina události aktivní, při návštěvě této stránky jako uživatel od konkrétního dodavatele nelze upravovat produkty, které byly ukončeny, protože tlačítko Upravit je pro tyto produkty skryté. Chef Anton's Gumbo Mix je například ukončený produkt dodavatele New Orleans Cajun Delights. Při návštěvě stránky pro tohoto konkrétního dodavatele je tlačítko Upravit pro tento produkt skryto v dohledu (viz obrázek 14). Při návštěvě pomocí možnosti Zobrazit/Upravit všechny dodavatele je však k dispozici tlačítko Upravit (viz obrázek 15).
Obrázek 14: Pro uživatele Supplier-Specific je tlačítko Upravit pro Chef Anton's Gumbo Mix skryté (Kliknutím zobrazíte obrázek v plné velikosti)
Obrázek 15: U uživatelů zobrazit/upravit všechny dodavatele se zobrazí tlačítko Upravit pro Chef Anton s Gumbo Mix (kliknutím zobrazíte obrázek v plné velikosti).
Kontrola přístupových práv ve vrstvě obchodní logiky
V tomto kurzu stránka ASP.NET zpracovává veškerou logiku s ohledem na informace, které může uživatel zobrazit a jaké produkty může aktualizovat. V ideálním případě by tato logika byla přítomna také ve vrstvě obchodní logiky. Například SuppliersBLL metoda třídy GetSuppliers() (která vrací všechny dodavatele) může obsahovat kontrolu, která zajistí, že aktuálně přihlášený uživatel není přidružený ke konkrétnímu dodavateli.
UpdateSupplierAddress Metoda může také zahrnovat kontrolu, která zajistí, že aktuálně přihlášený uživatel pracoval pro naši společnost (a proto může aktualizovat všechny informace o adrese dodavatelů) nebo je přidružený k dodavateli, jehož data se aktualizují.
Nezahrnul jsem sem takové kontroly BLL-vrstvy, protože v našem tutoriálu jsou uživatelská práva určena pomocí DropDownList na stránce, ke které třídy BLL nemají přístup. Při použití systému členství nebo některého z předefinovaných schémat ověřování, která poskytuje ASP.NET (například ověřování systému Windows), mohou být aktuálně přihlášené informace o uživatelích a rolích přístupné z BLL, což umožňuje takové kontroly přístupových práv na úrovni prezentace i BLL.
Shrnutí
Většina webů, které poskytují uživatelské účty, musí přizpůsobit rozhraní pro úpravu dat na základě přihlášeného uživatele. Správci mohou být schopni odstranit a upravit jakýkoli záznam, zatímco uživatelé, kteří nejsou správci, mohou být omezeni pouze na aktualizaci nebo odstranění záznamů, které sami vytvořili. Bez ohledu na to, jaký scénář může nastat, třídy Web kontrol, ObjectDataSource a vrstva obchodní logiky lze rozšířit o přidání nebo zamítnutí určitých funkcí na základě přihlášeného uživatele. V tomto kurzu jsme viděli, jak omezit zobrazitelná a upravitelná data v závislosti na tom, jestli byl uživatel přidružený k určitému dodavateli nebo jestli pracoval pro naši společnost.
V tomto kurzu se dozvíte, jak vložit, aktualizovat a odstranit data pomocí ovládacích prvků GridView, DetailsView a FormView. Od dalšího kurzu se podíváme na přidání podpory stránkování a řazení.
Šťastné programování!
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams: Nauč se ASP.NET 2.0 za 24 hodin. Může být dosažitelný na mitchell@4GuysFromRolla.comadrese .