Omezení funkcí pro úpravu dat podle uživatele (C#)
Ve webové aplikaci, která uživatelům umožňuje upravovat data, můžou mít různé uživatelské účty různá oprávnění k úpravám dat. V tomto kurzu prozkoumáme, jak dynamicky upravit možnosti úprav dat na základě hostujícího uživatele.
Úvod
Řada webových aplikací podporuje uživatelské účty a poskytuje různé možnosti, sestavy a funkce na základě přihlášeného uživatele. V našich kurzech bychom například mohli uživatelům z dodavatelských společností umožnit, aby se přihlásili na web a aktualizovali obecné informace o svých produktech – třeba jejich název a množství na jednotku – spolu s informacemi o dodavatelích, jako je název společnosti, adresa, informace o kontaktní osobě 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ě, úroveň změny objednávek atd. Naše webová aplikace může také umožnit anonymním uživatelům navštěvovat (osoby, které se nepřihlásili), ale omezí je jenom na prohlížení dat. S takovým systémem uživatelských účtů bychom chtěli, aby webové ovládací prvky dat na našich ASP.NET stránkách nabízely možnosti vkládání, úprav a odstraňování vhodné pro aktuálně přihlášeného uživatele.
V tomto kurzu prozkoumáme, jak dynamicky upravit možnosti úprav dat na základě hostujícího uživatele. Konkrétně vytvoříme stránku, která zobrazí informace o dodavatelích v upravitelném zobrazení DetailsView spolu s objektem GridView, který obsahuje seznam produktů poskytovaných dodavatelem. Pokud uživatel, který navštíví stránku, pochází z naší společnosti, může: zobrazit informace o dodavateli; upravit jejich adresu; a upravte informace o všech produktech poskytovaných dodavatelem. Pokud je ale uživatel z konkrétní společnosti, může jenom zobrazovat a upravovat své vlastní informace o adrese a upravovat jenom produkty, které nebyly označeny jako ukončené.
Obrázek 1: Uživatel z naší společnosti může upravit libovolné informace o dodavateli (kliknutím zobrazíte obrázek v plné velikosti)
Obrázek 2: Uživatel od určitého dodavatele může pouze zobrazit a upravit své informace (kliknutím zobrazíte obrázek v plné velikosti)
Pusťme se do toho!
Poznámka
Systém členství ASP.NET 2.0 s poskytuje standardizovanou rozšiřitelný platformu pro vytváření, správu a ověřování uživatelských účtů. Vzhledem k tomu, že zkoumání systému členství je nad rámec těchto kurzů, tento kurz místo toho "falšuje" členství tím, že umožňuje anonymním návštěvníkům zvolit, zda jsou od konkrétního dodavatele nebo z naší společnosti. Další informace o členství najdete v mé sérii článků Zkoumání členství, rolí a profilu ASP.NET 2.0 s.
Krok 1: Povolení zadání přístupových práv uživateli
V reálné webové aplikaci by informace o účtu uživatele zahrnovaly, zda 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 se dají zachytit prostřednictvím systému rolí ASP.NET 2.0 s, jako informace o účtu na úrovni uživatele prostřednictvím systému profilů nebo pomocí 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 není určen k prezentaci 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 – dropDownList, ze kterého může uživatel určit, jestli by měl být schopen zobrazit a upravit některé z informací o dodavatelích, nebo případně, jaké konkrétní informace o dodavateli mohou zobrazit a upravit. Pokud uživatel uvede, že může zobrazit a upravit všechny informace o dodavateli (výchozí nastavení), může procházet stránky se všemi dodavateli, upravovat informace o adrese libovolného dodavatele a upravovat názvy a množství na jednotku pro jakýkoli produkt poskytnutý vybraným dodavatelem. Pokud ale uživatel uvede, že může jenom zobrazit a upravit konkrétního dodavatele, pak může zobrazit pouze podrobnosti a produkty pro tohoto dodavatele a může aktualizovat pouze informace o názvu a množství podle jednotek pro produkty, které nejsou ukončeny.
Naším prvním krokem v tomto kurzu 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 nastavená na Suppliers
, a vytvořte vazbu tohoto dropDownList na nový objekt ObjectDataSource s názvem AllSuppliersDataSource
.
Obrázek 3: Vytvoření nového objektuDataSource s názvem AllSuppliersDataSource
(kliknutím zobrazíte obrázek v plné velikosti)
Vzhledem k tomu, že chceme, aby tento dropDownList zahrnoval všechny dodavatele, nakonfigurujte ObjectDataSource tak, aby volaly metodu SuppliersBLL
třídy s GetSuppliers()
. Také se ujistěte, že je metoda ObjectDataSource s Update()
namapovaná na metodu SuppliersBLL
třídy s UpdateSupplierAddress
, protože tuto objectDataSource použije také DetailsView, který přidáme v kroku 2.
Po dokončení průvodce ObjectDataSource dokončete kroky nakonfigurováním rozevíracího Suppliers
seznamu tak, aby zobrazoval CompanyName
datové pole a používal SupplierID
datové pole jako hodnotu pro každou ListItem
položku .
Obrázek 4: Konfigurace rozevíracího Suppliers
seznamu pro použití CompanyName
datových polí a SupplierID
(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. Do rozevíracího seznamu ale musíme zahrnout také možnost Zobrazit/upravit VŠECHNY dodavatele. Chcete-li to provést, nastavte Suppliers
vlastnost DropDownList na AppendDataBoundItems
true
a pak přidejte ListItem
vlastnost, jejíž Text
vlastnost je "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 Designer přechodem na okno Vlastnosti a kliknutím na tři tečky ve vlastnosti DropDownList sItems
.
Poznámka
Projděte si kurz Filtrování předlohy a podrobností pomocí rozevíracího seznamu, kde najdete podrobnější diskuzi o přidání položky Vybrat vše do datového rozevíracího seznamu.
AppendDataBoundItems
Po nastavení vlastnosti a ListItem
přidání by deklarativní kód DropDownList měl 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 s naším aktuálním průběhem při prohlížení v prohlížeči.
Obrázek 5: Rozevírací Suppliers
seznam obsahuje možnost Zobrazit VŠE ListItem
a navíc jednu pro každého dodavatele (kliknutím zobrazíte obrázek v plné velikosti).
Vzhledem k tomu, že chceme uživatelské rozhraní aktualizovat hned po změně výběru uživatelem, nastavte Suppliers
vlastnost DropDownList na AutoPostBack
true
. V kroku 2 vytvoříme ovládací prvek DetailsView, který zobrazí informace o dodavatelích 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 příslušných informací o dodavateli na detailsView na základě vybraného dodavatele.
Krok 2: Přidání ovládacího prvku DetailsView
Umožňuje použít zobrazení DetailsView k zobrazení informací o dodavateli. Pro uživatele, který může zobrazit a upravit všechny dodavatele, DetailsView bude podporovat stránkování, což uživateli umožní krokovat informace o dodavateli po jednom záznamu. Pokud však uživatel pracuje pro konkrétního dodavatele, DetailsView zobrazí pouze informace o konkrétním dodavateli a nebude obsahovat stránkovací rozhraní. V obou případech detailsView musí uživateli umožnit upravit pole adresa dodavatele, město a země.
Přidejte DetailsView na stránku pod Suppliers
DropDownList, nastavte jeho ID
vlastnost na SupplierDetails
a vytvořte 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 inteligentní značky DetailsView.
Poznámka
Pokud nevidíte možnost Povolit úpravy v DetailsView s inteligentní značka je to, protože jste nenamapovali ObjectDataSource s Update()
metodu SuppliersBLL
třídy s UpdateSupplierAddress
metody. Chvíli se vraťte a proveďte tuto změnu konfigurace, po které by se ve inteligentní značce DetailsView měla zobrazit možnost Povolit úpravy.
SuppliersBLL
Vzhledem k tomu, třídy s UpdateSupplierAddress
metoda pouze čtyři parametry - supplierID
, address
, city
a country
- upravit DetailsView s BoundFields tak, aby CompanyName
a Phone
BoundFields jsou jen pro čtení. Kromě toho úplně odeberte SupplierID
BoundField. AllSuppliersDataSource
Objekt ObjectDataSource má nyní vlastnost OldValuesParameterFormatString
nastavenou na original_{0}
hodnotu . Udělejte chvilku a odeberte toto nastavení vlastnosti z deklarativní syntaxe úplně, nebo ho nastavte na výchozí hodnotu {0}
.
Po konfiguraci SupplierDetails
objektů 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 detailsView lze stránkovat a informace o adrese vybraného dodavatele lze aktualizovat, bez ohledu na výběr v rozevíracím Suppliers
seznamu (viz Obrázek 6).
Obrázek 6: Všechny informace o dodavatelích lze zobrazit a aktualizovat jejich adresu (kliknutím zobrazíte obrázek v plné velikosti)
Krok 3: Zobrazení pouze informací vybraného dodavatele
Naše stránka aktuálně zobrazuje informace pro všechny dodavatele bez ohledu na to, jestli byl z rozevíracího Suppliers
seznamu vybrán konkrétní dodavatel. Aby bylo možné zobrazit pouze 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ý objekt ObjectDataSource a pojmete ho SingleSupplierDataSource
. V inteligentní značce klikněte na odkaz Konfigurovat zdroj dat a nechte ho používat metodu SuppliersBLL
třídy s GetSupplierBySupplierID(supplierID)
. Stejně jako u AllSuppliersDataSource
ObjectDataSource, namapujte metodu SingleSupplierDataSource
ObjectDataSource s Update()
na metodu SuppliersBLL
třídy s UpdateSupplierAddress
.
Obrázek 7: Konfigurace objektu SingleSupplierDataSource
ObjectDataSource pro použití GetSupplierBySupplierID(supplierID)
metody (kliknutím zobrazíte obrázek v plné velikosti)
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 o dodavateli vybraném z rozevíracího seznamu, použijte jako zdroj parametru Suppliers
vlastnost DropDownList s SelectedValue
.
Obrázek 8: Použití rozevíracího Suppliers
seznamu jako supplierID
zdroje parametrů (kliknutím zobrazíte obrázek v plné velikosti)
Dokonce i s tímto druhým ObjectDataSource přidán, DetailsView ovládací prvek je aktuálně nakonfigurován tak, aby vždy používal AllSuppliersDataSource
ObjectDataSource. Potřebujeme přidat logiku pro úpravu zdroje dat používaného DetailsView v závislosti na Suppliers
vybrané položce DropDownList. Chcete-li toho dosáhnout, vytvořte obslužnou rutinu SelectedIndexChanged
události pro rozevírací seznam dodavatelů. Nejsnáže se dá vytvořit poklikáním na rozevírací seznam v Designer. Tato obslužná rutina události musí určit, jaký zdroj dat použít, a musí znovu připojit data k DetailsView. K tomu slouží následující kód:
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 nebo 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ů nastavením PageIndex
vlastnosti na 0. Pokud však uživatel vybral konkrétního dodavatele z Rozevírací seznam, DetailsView s DataSourceID
je přiřazena k SingleSuppliersDataSource
. Bez ohledu na to, jaký zdroj dat je použit, SuppliersDetails
je režim vrácen zpět do režimu jen pro čtení a data jsou zpět do DetailsView voláním SuppliersDetails
metody ovládacího prvku s DataBind()
.
S touto obslužnou rutinou události nyní DetailsView ovládací prvek zobrazuje vybraného dodavatele, pokud nebyla vybrána možnost "Zobrazit/Upravit VŠECHNY dodavatele", v takovém případě lze zobrazit všechny dodavatele prostřednictvím stránkovacího rozhraní. Obrázek 9 znázorňuje stránku s vybranou možností Zobrazit/upravit VŠECHNY dodavatele; Všimněte si, že je k dispozici stránkovací rozhraní, které 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ě je možné 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: Lze zobrazit a upravit pouze informace vybraného dodavatele (kliknutím zobrazíte obrázek v plné velikosti)
Poznámka
Pro účely tohoto kurzu musí být ovládací prvky EnableViewState
DropDownList i DetailsView nastaveny na true
hodnotu (výchozí), protože změny vlastností DropDownList s SelectedIndex
a DetailsView s DataSourceID
musí být zapamatováno napříč postbacky.
Krok 4: Výpis dodavatelů produktů v upravitelném zobrazení GridView
Po dokončení zobrazení DetailsView je naším dalším krokem zahrnout upravitelné zobrazení GridView, které obsahuje seznam produktů poskytovaných vybraným dodavatelem. Toto zobrazení GridView by mělo umožňovat úpravy pouze polí ProductName
a QuantityPerUnit
. Kromě toho platí, že pokud uživatel, který stránku navštěvuje, pochází od určitého dodavatele, měl by povolit aktualizace jenom těch produktů, které nejsou ukončeny. Abychom toho dosáhli, musíme nejprve přidat přetížení ProductsBLL
metody třídy s UpdateProducts
, která jako vstupy přijímá pouze ProductID
pole , ProductName
a QuantityPerUnit
. Tento proces jsme si prošli předem v mnoha kurzech, takže se podívejme na kód zde, který by měl být přidán 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;
}
Po vytvoření tohoto přetížení jsme připraveni přidat GridView ovládací prvek a jeho přidružené ObjectDataSource. Přidejte na stránku nový objekt GridView, nastavte jeho ID
vlastnost na ProductsBySupplier
a nakonfigurujte ji tak, aby používala nový objekt ObjectDataSource s názvem ProductsBySupplierDataSource
. Vzhledem k tomu, že chceme, aby tento Objekt GridView vypisoval tyto produkty vybraným dodavatelem, použijte metodu ProductsBLL
třídy s GetProductsBySupplierID(supplierID)
. Namapujte také metodu Update()
na nové UpdateProduct
přetížení, které jsme právě vytvořili.
Obrázek 11: Konfigurace objektu ObjectDataSource pro použití právě vytvořeného UpdateProduct
přetížení (kliknutím zobrazíte obrázek v 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 s SelectedValue
jako zdroj parametru.
Obrázek 12: Použití SuppliersDetails
vlastnosti DetailsView s SelectedValue
jako zdroje parametrů (kliknutím zobrazíte obrázek v plné velikosti)
Když se vrátíte do objektu GridView, odeberte všechna pole GridView s výjimkou , QuantityPerUnit
a Discontinued
označíte Discontinued
CheckBoxField jako jen pro ProductName
čtení. Zaškrtněte také možnost Povolit úpravy v inteligentní značce GridView. Po provedení těchto změn by deklarativní kód pro Objekty GridView a ObjectDataSource měl vypadat přibližně takto:
<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 předchozích ObjectDataSources je tato vlastnost s OldValuesParameterFormatString
nastavená 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 zobrazení GridView (viz obrázek 13). V současné době je možné aktualizovat název produktu nebo množství na jednotku. Musíme ale aktualizovat logiku stránky tak, aby takové funkce byly zakázány pro ukončené produkty pro uživatele přidružené k určitému dodavateli. Tento poslední díl si probereme v kroku 5.
Obrázek 13: Zobrazí se produkty poskytované vybraným dodavatelem (kliknutím zobrazíte obrázek v plné velikosti)
Poznámka
S přidáním tohoto upravitelného objektu Suppliers
GridView by měla být obslužná rutina události DropDownList s SelectedIndexChanged
aktualizována tak, aby vrátila GridView do stavu jen pro čtení. V opačném případě, pokud je při úpravě informací o produktu vybrán jiný dodavatel, bude možné upravit také odpovídající index v GridView pro nového dodavatele. Chcete-li tomu zabránit, jednoduše nastavte vlastnost -1
GridView s EditIndex
na v obslužné rutině SelectedIndexChanged
události.
Nezapomeňte také, že je důležité, aby byl stav zobrazení GridView povolený (výchozí chování). Pokud nastavíte vlastnost GridView s EnableViewState
na false
, riskujete, že souběžní uživatelé neúmyslně odstraní nebo upraví záznamy.
Krok 5: Zakázání úprav pro produkty s ukončeným provozem, pokud není vybraná možnost Zobrazit nebo upravit VŠECHNY dodavatele
ProductsBySupplier
Zatímco GridView je plně funkční, v současné době uděluje příliš velký přístup uživatelům, kteří jsou od konkrétního dodavatele. Podle našich obchodních pravidel by tito uživatelé neměli mít možnost 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, když stránku navštíví uživatel 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 zjistit, jestli je uživatel přidružený ke konkrétnímu dodavateli, což lze v tomto kurzu určit kontrolou vlastnosti Supplier DropDownList s SelectedValue
– pokud je to něco jiného než -1, pak je uživatel přidružený ke konkrétnímu dodavateli. U těchto uživatelů pak musíme určit, jestli je produkt ukončen. Odkaz na skutečnou ProductRow
instanci vázanou na řádek GridView můžeme získat prostřednictvím e.Row.DataItem
vlastnosti, jak je popsáno v kurzu Zobrazení souhrnných informací v zápatí GridView. Pokud je produkt ukončen, můžeme získat programový odkaz na tlačítko Upravit v objektu GridView s CommandField pomocí technik probíraných v předchozím kurzu Přidání Client-Side potvrzení při odstraňová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;
}
}
}
}
S touto obslužnou rutinou události, když navštívíte tuto stránku jako uživatel od konkrétního dodavatele, produkty, které jsou ukončeny, nejsou možné upravovat, protože tlačítko Upravit je pro tyto produkty skryté. Například Chef Anton s Gumbo Mix je ukončený produkt pro New Orleans Cajun Delights dodavatele. Při návštěvě stránky tohoto konkrétního dodavatele je tlačítko Upravit pro tento produkt skryté před zrakem (viz obrázek 14). Při návštěvě pomocí možnosti Show/Edit ALL Suppliers (Zobrazit/upravit všechny dodavatele) je tlačítko Upravit dostupné (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 to, jaké informace může uživatel zobrazit a jaké produkty může aktualizovat. V ideálním případě by se tato logika vyskytovala také ve vrstvě obchodní logiky. Například SuppliersBLL
metoda třídy s 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. Stejně tak může metoda zahrnovat kontrolu, která zajistí, UpdateSupplierAddress
že aktuálně přihlášený uživatel buď pracoval pro naši společnost (a proto může aktualizovat informace o adrese všech dodavatelů), nebo je přidružen k dodavateli, jehož data se aktualizují.
Nezahrnuli jsem sem takové kontroly vrstvy BLL, protože v našem kurzu jsou uživatelská práva určena rozevíracím seznamem na stránce, ke kterému třídy BLL nemají přístup. Při použití systému členství nebo některého ze schémat ověřování předefinovaných ASP.NET (jako je ověřování Systému Windows) je možné získat přístup k aktuálně přihlášeným informacím o uživatelích a informacím o rolích z BLL, což umožňuje tyto kontroly přístupových práv na úrovni prezentace i úrovně BLL.
Souhrn
Většina webů, které poskytují uživatelské účty, musí přizpůsobit rozhraní pro úpravy 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 scénář lze rozšířit datové webové ovládací prvky, ObjectDataSource a třídy vrstvy obchodní logiky přidat nebo odepřít určité funkce na základě přihlášeného uživatele. V tomto kurzu jsme zjistili, 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.
Tento kurz uzavírá naše zkoumání vkládání, aktualizace a odstraňování dat pomocí ovládacích prvků GridView, DetailsView a FormView. Od dalšího kurzu se budeme věnovat přidávání podpory stránkování a řazení.
Šťastné programování!
O autorovi
Scott Mitchell, autor sedmi knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Můžete ho najít na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na http://ScottOnWriting.NETadrese .
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro