Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In un'applicazione Web che consente agli utenti di modificare i dati, diversi account utente possono avere privilegi di modifica dei dati diversi. In questa esercitazione si esaminerà come modificare dinamicamente le funzionalità di modifica dei dati in base all'utente in visita.
Introduzione
Diverse applicazioni Web supportano gli account utente e offrono opzioni, report e funzionalità diverse in base all'utente connesso. Ad esempio, con le nostre esercitazioni potremmo voler consentire agli utenti delle aziende fornitrici di accedere al sito e aggiornare le informazioni generali sui loro prodotti, come il nome e la quantità per unità, insieme alle informazioni sul fornitore, come il nome dell'azienda, l'indirizzo, le informazioni di contatto e così via. Inoltre, potrebbe essere necessario includere alcuni account utente per le persone della nostra azienda in modo che possano accedere e aggiornare informazioni sul prodotto, ad esempio unità su magazzino, livello di riordinamento e così via. L'applicazione Web potrebbe anche consentire agli utenti anonimi di visitare (utenti che non hanno eseguito l'accesso), ma limitarli solo alla visualizzazione dei dati. Con un sistema di gestione utenti di questo tipo, i controlli Web dati nelle pagine di ASP.NET dovrebbero offrire le funzionalità di inserimento, modifica ed eliminazione appropriate per l'utente attualmente connesso.
In questa esercitazione si esaminerà come modificare dinamicamente le funzionalità di modifica dei dati in base all'utente in visita. In particolare, verrà creata una pagina che visualizza le informazioni sui fornitori in un controllo DetailsView modificabile insieme a un controllo GridView che elenca i prodotti forniti dal fornitore. Se l'utente che visita la pagina proviene dalla nostra azienda, può: visualizzare le informazioni dei fornitori; modifica il loro indirizzo; e modificare le informazioni relative a qualsiasi prodotto fornito dal fornitore. Se, tuttavia, l'utente proviene da una determinata società, può solo visualizzare e modificare le proprie informazioni sull'indirizzo e modificare solo i prodotti che non sono stati contrassegnati come sospesi.
Figura 1: Un utente della nostra azienda può modificare le informazioni di qualsiasi fornitore (fare clic per visualizzare l'immagine a dimensione intera)
Figura 2: Un utente di un determinato fornitore può visualizzare e modificare solo le informazioni (fare clic per visualizzare l'immagine a dimensione intera)
Iniziamo!
Annotazioni
ASP.NET sistema di appartenenza di 2.0 offre una piattaforma standardizzata ed estendibile per la creazione, la gestione e la convalida degli account utente. Dal momento che un esame del sistema di appartenenza esula dall'ambito di queste esercitazioni, questa esercitazione invece "falsi" appartenenza consentendo ai visitatori anonimi di scegliere se provengono da un determinato fornitore o dalla nostra azienda. Per altre informazioni sull'appartenenza, vedere la serie di articoli Analisi ASP.NET 2.0, appartenenza, ruoli e profilo .
Passaggio 1: Consentire all'utente di specificare i diritti di accesso
In un'applicazione Web reale, le informazioni sull'account di un utente includono se lavoravano per la nostra azienda o per un determinato fornitore e queste informazioni sarebbero accessibili a livello di codice dalle pagine ASP.NET una volta che l'utente ha eseguito l'accesso al sito. Queste informazioni possono essere acquisite tramite il sistema di ruoli di ASP.NET 2.0, come informazioni sugli account a livello utente attraverso il sistema di profili o tramite alcuni metodi personalizzati.
Poiché l'obiettivo di questa esercitazione è illustrare la modifica delle funzionalità di modifica dei dati in base all'utente connesso e non è destinato a presentare ASP.NET 2.0 s appartenenza, ruoli e sistemi di profilo, si userà un meccanismo molto semplice per determinare le funzionalità per l'utente che visita la pagina: un elenco a discesa da cui l'utente può indicare se devono essere in grado di visualizzare e modificare le informazioni sui fornitori o, in alternativa, quali informazioni particolari fornitori possono visualizzare e modificare. Se l'utente indica che può visualizzare e modificare tutte le informazioni sul fornitore (impostazione predefinita), può scorrere tutti i fornitori, modificare le informazioni sull'indirizzo del fornitore e modificare il nome e la quantità per unità per ogni prodotto fornito dal fornitore selezionato. Se l'utente indica che può solo visualizzare e modificare un determinato fornitore, tuttavia, può visualizzare solo i dettagli e i prodotti per tale fornitore e può aggiornare solo il nome e la quantità per unità per tali prodotti non sospesi.
Il primo passaggio di questa esercitazione consiste nel creare questo elenco a discesa e popolarlo con i fornitori nel sistema. Aprire la UserLevelAccess.aspx pagina nella EditInsertDelete cartella, aggiungere un elenco DropDownList la cui ID proprietà è impostata su Supplierse associare l'oggetto DropDownList a un nuovo ObjectDataSource denominato AllSuppliersDataSource.
Figura 3: Creare un nuovo oggettoDataSource denominato AllSuppliersDataSource (fare clic per visualizzare l'immagine a dimensione intera)
Poiché si vuole che questo DropDownList includa tutti i fornitori, configurare ObjectDataSource per richiamare il SuppliersBLL metodo della GetSuppliers() classe. Assicurati anche che il metodo della classe Update() sia mappato al metodo SuppliersBLL di ObjectDataSource, poiché questo ObjectDataSource verrà utilizzato anche da DetailsView che verrà aggiunto nel Passaggio 2.
Dopo aver completato la procedura guidata ObjectDataSource, completare i passaggi successivi configurando l'elenco Suppliers a discesa in modo che visualizzi il campo dati CompanyName e utilizzi il campo dati SupplierID come valore per ogni ListItem oggetto.
Figura 4: Configurare il DropDownList per utilizzare i campi dati Suppliers, CompanyName e SupplierID (Fare clic per visualizzare l'immagine a dimensione intera)
A questo punto, l'elenco a discesa elenca i nomi aziendali dei fornitori nel database. Tuttavia, è anche necessario includere un'opzione "Mostra/Modifica TUTTI i fornitori" nell'elenco a discesa. A tale scopo, impostare la proprietà Suppliers della AppendDataBoundItems DropDownList true e quindi aggiungere un ListItem la cui proprietà Text è "Visualizza/Modifica TUTTI i fornitori" e il cui valore è -1. Questo può essere aggiunto direttamente tramite il markup dichiarativo o tramite il Designer accedendo alla finestra Proprietà e facendo clic sui puntini di sospensione nella proprietà del DropDownList s Items.
Annotazioni
Per una descrizione più dettagliata sull'aggiunta di un elemento "Select All" a una DropDownList associata ai dati, fare riferimento all'esercitazione "Filtro Master/Dettaglio con un elenco a discesa".
Dopo che la AppendDataBoundItems proprietà è stata impostata e aggiunta ListItem , il markup dichiarativo di DropDownList dovrebbe essere simile al seguente:
<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>
La figura 5 mostra uno screenshot dello stato di avanzamento corrente, quando visualizzato tramite un browser.
Figura 5: L'elenco Suppliers a discesa contiene un'opzione Mostra TUTTO ListItem, più uno per ogni fornitore (fare clic per visualizzare l'immagine a dimensione intera)
Poiché si vuole aggiornare l'interfaccia utente immediatamente dopo che l'utente ha modificato la selezione, impostare la proprietà Suppliers del AutoPostBack DropDownList su true. Nel passaggio 2 verrà creato un controllo DetailsView che mostrerà le informazioni per i fornitori in base alla selezione DropDownList. Quindi, nel passaggio 3 verrà creato un gestore eventi per questo evento DropDownList SelectedIndexChanged , in cui si aggiungerà il codice che associa le informazioni del fornitore appropriate a DetailsView in base al fornitore selezionato.
Passaggio 2: Aggiunta di un controllo DetailsView
Utilizziamo un controllo DetailsView per mostrare le informazioni sul fornitore. Per l'utente che può visualizzare e modificare tutti i fornitori, DetailsView supporterà il paging, consentendo all'utente di esaminare le informazioni sul fornitore un record alla volta. Se l'utente lavora per un determinato fornitore, tuttavia, DetailsView mostrerà solo le informazioni del fornitore specifico e non includerà un'interfaccia di paging. In entrambi i casi, DetailsView deve consentire all'utente di modificare i campi indirizzo, città e paese del fornitore.
Aggiungere un controllo DetailsView alla pagina sotto il DropDownList Suppliers, impostarne la proprietà ID su SupplierDetails, e associarla all'ObjectDataSource AllSuppliersDataSource creato nel passaggio precedente. Selezionare quindi le caselle di controllo Abilita paging e Abilita modifica dallo smart tag DetailsView.
Annotazioni
Se non viene visualizzata un'opzione Abilita modifica nello smart tag DetailsView, il metodo ObjectDataSource Update() non è stato mappato al SuppliersBLL metodo della classe s UpdateSupplierAddress . Prenditi un momento per tornare indietro e apportare questa modifica alla configurazione, dopo la quale l'opzione Abilita Modifica dovrebbe essere visualizzata nello smart tag di DetailsView.
Poiché il metodo della classe SuppliersBLL accetta solo quattro parametri - UpdateSupplierAddress, supplierID, address e city - modifica i BoundFields di DetailsView in modo che i BoundFields country e CompanyName siano di sola lettura. Inoltre, rimuovere completamente il SupplierID BoundField. Infine, l'AllSuppliersDataSource ObjectDataSource ha attualmente la sua proprietà OldValuesParameterFormatString impostata su original_{0}. Prenditi un momento per rimuovere questa impostazione della proprietà dalla sintassi dichiarativa oppure impostarla sul valore predefinito {0}.
Dopo aver SupplierDetails configurato DetailsView e AllSuppliersDataSource ObjectDataSource, si avrà il markup dichiarativo seguente:
<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>
A questo punto è possibile scorrere il controllo DetailsView e aggiornare le informazioni sull'indirizzo del fornitore selezionato, indipendentemente dalla selezione effettuata nell'elenco Suppliers a discesa (vedere la figura 6).
Figura 6: è possibile visualizzare le informazioni sui fornitori e aggiornarne l'indirizzo (fare clic per visualizzare l'immagine a dimensione intera)
Passaggio 3: Visualizzazione solo delle informazioni del fornitore selezionato
La nostra pagina visualizza attualmente le informazioni per tutti i fornitori indipendentemente dal fatto che un determinato fornitore sia stato selezionato dall'elenco Suppliers a discesa. Per visualizzare solo le informazioni sul fornitore selezionato, è necessario aggiungere un'altra ObjectDataSource alla pagina, una che recupera informazioni su un determinato fornitore.
Aggiungere un nuovo ObjectDataSource alla pagina, denominandolo SingleSupplierDataSource. Dallo smart tag, clicca sul collegamento "Configura origine dati" e configura in modo che usi il metodo della classe SuppliersBLL. Come per AllSuppliersDataSource ObjectDataSource, il SingleSupplierDataSource ObjectDataSource e il metodo Update() della classe SuppliersBLL sono mappati al metodo UpdateSupplierAddress.
Figura 7: Configurare ObjectDataSource per l'uso SingleSupplierDataSource del metodo (GetSupplierBySupplierID(supplierID) a dimensione intera)
Verrà quindi richiesto di specificare l'origine del parametro per il GetSupplierBySupplierID(supplierID) parametro di input del supplierID metodo. Poiché si vogliono visualizzare le informazioni per il fornitore selezionato da DropDownList, usare la Suppliers proprietà DropDownList s SelectedValue come origine del parametro.
Figura 8: Usare l'elenco Suppliers a discesa come origine dei parametri (supplierID a dimensione intera)
Anche con questo secondo ObjectDataSource aggiunto, il controllo DetailsView è attualmente configurato per usare sempre AllSuppliersDataSource ObjectDataSource. È necessario aggiungere la logica per modificare l'origine dati usata da DetailsView a seconda dell'elemento Suppliers DropDownList selezionato. A tale scopo, creare un gestore eventi per il DropDownList dei Fornitori. Questa operazione può essere creata più facilmente facendo doppio clic sull'elenco a discesa nella finestra di progettazione. Questo gestore eventi deve determinare l'origine dati da usare e deve riassociare i dati a DetailsView. Questa operazione viene eseguita con il codice seguente:
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();
}
Il gestore eventi inizia determinando se è stata selezionata l'opzione "Mostra/Modifica TUTTI i fornitori". In caso affermativo, imposta la proprietà SupplierDetails DetailsView su DataSourceIDAllSuppliersDataSource e riporta l'utente al primo record nel set di fornitori impostando la proprietà PageIndex su 0. Se, tuttavia, l'utente ha selezionato un determinato fornitore da DropDownList, l'oggetto DetailsView s DataSourceID viene assegnato a SingleSuppliersDataSource. Indipendentemente dall'origine dati usata, la SuppliersDetails modalità viene ripristinata alla modalità di sola lettura e i dati vengono ripristinati a DetailsView da una chiamata al SuppliersDetails metodo del DataBind() controllo.
Con questo gestore eventi sul posto, il controllo DetailsView mostra ora il fornitore selezionato, a meno che non sia stata selezionata l'opzione "Mostra/Modifica TUTTI i fornitori", nel qual caso tutti i fornitori possono essere visualizzati tramite l'interfaccia di paging. La figura 9 mostra la pagina con l'opzione "Mostra/Modifica TUTTI i fornitori" selezionata; Si noti che l'interfaccia di paging è presente, consentendo all'utente di visitare e aggiornare qualsiasi fornitore. La figura 10 mostra la pagina con il fornitore Ma Maison selezionato. Solo le informazioni di Ma Maison sono visualizzabili e modificabili in questo caso.
Figura 9: Tutte le informazioni sui fornitori possono essere visualizzate e modificate (fare clic per visualizzare l'immagine a dimensione intera)
Figura 10: è possibile visualizzare e modificare solo le informazioni del fornitore selezionato (fare clic per visualizzare l'immagine a dimensione intera)
Annotazioni
Per questa esercitazione, sia il controllo DropDownList che detailsView devono EnableViewState essere impostati su true (impostazione predefinita) perché le modifiche apportate alle proprietà di DropDownList e SelectedIndex detailsView DataSourceID devono essere memorizzate tra i postback.
Passaggio 4: Elenco dei prodotti dei fornitori in un controllo GridView modificabile
Una volta completato DetailsView, il passaggio successivo consiste nell'includere un controllo GridView modificabile che elenca i prodotti forniti dal fornitore selezionato. Questo controllo GridView deve consentire modifiche solo ai campi ProductName e QuantityPerUnit. Inoltre, se l'utente che visita la pagina è associato a un determinato fornitore, dovrebbe essere consentito l'aggiornamento solo di quei prodotti che non sono stati sospesi. Per raggiungere questo obiettivo, dobbiamo prima aggiungere un overload del metodo della classe ProductsBLL che accetta solo i campi UpdateProducts, ProductID, e ProductName come input. Questo processo è stato eseguito in anticipo in numerose esercitazioni, quindi è sufficiente esaminare il codice qui, che deve essere aggiunto a 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;
}
Con questo sovraccarico creato, siamo pronti ad aggiungere il controllo GridView e il suo ObjectDataSource associato. Aggiungere un nuovo controllo GridView alla pagina, impostare la proprietà su IDProductsBySupplier e configurarla per l'uso di un nuovo ObjectDataSource denominato ProductsBySupplierDataSource. Poiché si vuole che GridView elenchi tali prodotti per il fornitore selezionato, usare il metodo della classe ProductsBLLGetProductsBySupplierID(supplierID). Esegui anche il mappatura del metodo Update() al nuovo overload UpdateProduct appena creato.
Figura 11: Configurare ObjectDataSource per l'uso dell'overload appena creato (UpdateProduct a dimensione intera)
Viene richiesto di selezionare l'origine del parametro per il GetProductsBySupplierID(supplierID) parametro di input del supplierID metodo. Poiché si vogliono visualizzare i prodotti per il fornitore selezionato in DetailsView, usare la SuppliersDetails proprietà del SelectedValue controllo DetailsView come origine del parametro.
Figura 12: Usare la SuppliersDetails proprietà DetailsView s SelectedValue come origine dei parametri (fare clic per visualizzare l'immagine a dimensione intera)
Tornando al GridView, rimuovere tutti i campi GridView ad eccezione di ProductName, QuantityPerUnit e Discontinued, contrassegnando il campo CheckBoxField Discontinued come di sola lettura. Verifica anche l'opzione Abilita la modifica dal tag intelligente di GridView. Dopo aver apportato queste modifiche, il markup dichiarativo per GridView e ObjectDataSource dovrebbe essere simile al seguente:
<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>
Come con le nostre precedenti sorgenti dati oggetto, la proprietà di questo è impostata su OldValuesParameterFormatString, il che causerà problemi quando si tenterà di aggiornare il nome o la quantità per unità di misura di un prodotto. Rimuovere completamente questa proprietà dalla sintassi dichiarativa o impostarla sul valore predefinito. {0}
Al termine di questa configurazione, la pagina elenca ora i prodotti forniti dal fornitore selezionato in GridView (vedere la figura 13). Attualmente è possibile aggiornare il nome o la quantità del prodotto per unità. Tuttavia, è necessario aggiornare la logica della pagina in modo che tale funzionalità non sia consentita per i prodotti sospesi per gli utenti associati a un determinato fornitore. Questa parte finale verrà affrontata nel passaggio 5.
Figura 13: Vengono visualizzati i prodotti forniti dal fornitore selezionato (fare clic per visualizzare l'immagine a dimensione intera)
Annotazioni
Con l'aggiunta di questo GridView modificabile, è necessario aggiornare il gestore di eventi del DropDownList per riportare il GridView a uno stato di sola lettura. In caso contrario, se viene selezionato un fornitore diverso durante la modifica delle informazioni sul prodotto, sarà modificabile anche l'indice corrispondente in GridView per il nuovo fornitore. Per evitare questo, impostare semplicemente la proprietà EditIndex di GridView su -1 nel gestore eventi SelectedIndexChanged.
Tenere presente anche che è importante abilitare lo stato di visualizzazione di GridView (comportamento predefinito). Se si imposta la proprietà EnableViewStategridView su false , si rischia di avere utenti simultanei in modo involontario eliminando o modificando i record.
Passaggio 5: Impedisci la modifica per i prodotti sospesi quando l'opzione mostra/modifica TUTTI i fornitori non è selezionata.
ProductsBySupplier Anche se GridView è completamente funzionante, attualmente concede troppo accesso a coloro che provengono da un determinato fornitore. In base alle regole di business, tali utenti non devono essere in grado di aggiornare i prodotti non più disponibili. Per applicare questo problema, è possibile nascondere (o disabilitare) il pulsante Modifica in tali righe gridView con prodotti non più attivi quando la pagina viene visitata da un utente di un fornitore.
Creare un gestore eventi per l'evento GridView.RowDataBound In questo gestore eventi è necessario determinare se l'utente è associato a un determinato fornitore, che, per questa esercitazione, può essere determinato controllando la proprietà Suppliers DropDownList s SelectedValue - se si tratta di qualcosa diverso da -1, l'utente è associato a un determinato fornitore. Per tali utenti, è quindi necessario determinare se il prodotto è sospeso o meno. È possibile acquisire un riferimento all'istanza effettiva ProductRow associata alla riga GridView tramite la proprietà e.Row.DataItem, come illustrato nell'esercitazione "Visualizzazione delle informazioni di riepilogo nel Piè di pagina di GridView". Se il prodotto non è più disponibile, è possibile ottenere un riferimento a livello di codice al pulsante Modifica nel campo di comando di GridView usando le tecniche descritte nell'esercitazione precedente, Aggiunta di Client-Side Conferma durante l'eliminazione. Dopo aver ottenuto un riferimento, è possibile nascondere o disabilitare il pulsante.
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;
}
}
}
}
Con questo gestore eventi implementato, quando si visita questa pagina come utente di un fornitore specifico, quei prodotti che sono stati interrotti non possono essere modificati, perché il pulsante Modifica è nascosto. Ad esempio, Chef Anton s Gumbo Mix è un prodotto non più disponibile per il fornitore New Orleans Cajun Delights. Quando si visita la pagina per questo particolare fornitore, il pulsante Modifica per questo prodotto è nascosto dalla vista (vedere la figura 14). Tuttavia, quando si visita utilizzando "Mostra/Modifica TUTTI i fornitori", il pulsante Modifica è disponibile (vedere la figura 15).
Figura 14: Per Supplier-Specific Utenti il pulsante Di modifica per Chef Anton s Gumbo Mix è nascosto (fare clic per visualizzare l'immagine a dimensione intera)
Per mostrare/modificare tutti gli utenti fornitori, viene visualizzato il pulsante Modifica per Chef Anton's Gumbo Mix.
Figura 15: Per mostra/modifica tutti gli utenti fornitori, viene visualizzato il pulsante Modifica per Chef Anton s Gumbo Mix (fare clic per visualizzare l'immagine a dimensione intera)
Controllo dei diritti di accesso nel livello della logica aziendale
In questa esercitazione la pagina ASP.NET gestisce tutta la logica per quanto riguarda le informazioni che l'utente può visualizzare e quali prodotti può aggiornare. Idealmente, questa logica sarebbe presente anche a livello di logica di business. Ad esempio, il SuppliersBLL metodo della GetSuppliers() classe (che restituisce tutti i fornitori) può includere un controllo per assicurarsi che l'utente attualmente connesso non sia associato a un fornitore specifico. Analogamente, il UpdateSupplierAddress metodo potrebbe includere un controllo per assicurarsi che l'utente attualmente connesso abbia lavorato per la nostra azienda (e pertanto può aggiornare tutte le informazioni sugli indirizzi dei fornitori) o è associato al fornitore i cui dati vengono aggiornati.
Non ho incluso tali controlli a livello BLL qui perché nel tutorial i diritti dell'utente sono selezionati tramite un menu a tendina sulla pagina, a cui le classi BLL non possono accedere. Quando si usa il sistema di appartenenza o uno degli schemi di autenticazione predefiniti forniti da ASP.NET (ad esempio l'autenticazione di Windows), è possibile accedere alle informazioni e ai ruoli dell'utente attualmente connessi dal BLL, rendendo quindi possibili tali controlli di accesso sia ai livelli di presentazione che di BLL.
Riassunto
La maggior parte dei siti che forniscono account utente deve personalizzare l'interfaccia di modifica dei dati in base all'utente connesso. Gli utenti amministratori possono essere in grado di eliminare e modificare qualsiasi record, mentre gli utenti non amministrativi possono essere limitati solo all'aggiornamento o all'eliminazione di record creati. Indipendentemente dallo scenario, i controlli Web dati, ObjectDataSource e le classi livello di logica di business possono essere estesi per aggiungere o negare determinate funzionalità in base all'utente connesso. In questa esercitazione è stato illustrato come limitare i dati visualizzabili e modificabili a seconda che l'utente fosse associato a un determinato fornitore o se lavorasse per la nostra azienda.
Questa esercitazione conclude l'esame dell'inserimento, dell'aggiornamento e dell'eliminazione di dati usando i controlli GridView, DetailsView e FormView. A partire dall'esercitazione successiva, verrà rivolta l'attenzione all'aggiunta del supporto per il paging e l'ordinamento.
Buon programmatori!
Informazioni sull'autore
Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato con le tecnologie Web Microsoft dal 1998. Scott lavora come consulente indipendente, formatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2.0 in 24 ore. Può essere raggiunto a mitchell@4GuysFromRolla.com.