Partager via


Limitation des fonctionnalités de modification des données en fonction de l’utilisateur (VB)

par Scott Mitchell

Télécharger le PDF

Dans une application web qui permet aux utilisateurs de modifier des données, différents comptes d’utilisateur peuvent avoir des privilèges de modification des données différents. Dans ce tutoriel, nous allons examiner comment ajuster dynamiquement les fonctionnalités de modification des données en fonction de l’utilisateur visiteur.

Introduction

Un certain nombre d’applications web prennent en charge les comptes d’utilisateur et fournissent différentes options, rapports et fonctionnalités en fonction de l’utilisateur connecté. Par exemple, avec nos tutoriels, nous pourrions permettre aux utilisateurs des entreprises fournisseurs de se connecter au site et de mettre à jour des informations générales sur leurs produits ( leur nom et leur quantité par unité, peut-être ) ainsi que des informations sur le fournisseur, telles que le nom de leur entreprise, l’adresse, les informations de la personne de contact, etc. En outre, nous pourrions inclure certains comptes d’utilisateur pour les personnes de notre entreprise afin qu’elles puissent se connecter et mettre à jour les informations de produit telles que les unités sur les stocks, le niveau de réorganisation, etc. Notre application web peut également autoriser les utilisateurs anonymes à visiter (personnes qui ne se sont pas connectées), mais les limiterait à l’affichage des données. Avec un tel système de compte d’utilisateur en place, nous souhaitons que les contrôles Web de données de nos pages ASP.NET offrent les fonctionnalités d’insertion, de modification et de suppression appropriées pour l’utilisateur actuellement connecté.

Dans ce tutoriel, nous allons examiner comment ajuster dynamiquement les fonctionnalités de modification des données en fonction de l’utilisateur visiteur. En particulier, nous allons créer une page qui affiche les informations des fournisseurs dans un DetailsView modifiable ainsi qu’un GridView qui répertorie les produits fournis par le fournisseur. Si l’utilisateur qui visite la page provient de notre entreprise, il peut : afficher les informations du fournisseur ; modifier leur adresse ; et modifier les informations pour tout produit fourni par le fournisseur. Toutefois, si l’utilisateur appartient à une entreprise particulière, il peut uniquement afficher et modifier ses propres informations d’adresse et ne peut modifier que ses produits qui n’ont pas été marqués comme ayant été abandonnés.

Un utilisateur de notre société peut modifier n’importe quelle information de fournisseur

Figure 1 : Un utilisateur de notre entreprise peut modifier n’importe quelle information de fournisseur (cliquez pour afficher l’image en taille réelle)

Un utilisateur d’un fournisseur particulier peut uniquement afficher et modifier ses informations

Figure 2 : Un utilisateur d’un fournisseur particulier peut uniquement afficher et modifier ses informations (cliquer pour afficher l’image en taille réelle)

Commençons !

Notes

ASP.NET système d’appartenance 2.0 s fournit une plateforme standardisée et extensible pour la création, la gestion et la validation de comptes d’utilisateur. Étant donné qu’un examen du système d’adhésion dépasse le cadre de ces tutoriels, ce tutoriel « falsifie » l’appartenance en permettant aux visiteurs anonymes de choisir s’ils proviennent d’un fournisseur particulier ou de notre entreprise. Pour plus d’informations sur l’appartenance, reportez-vous à la série d’articles Examen de ASP.NET 2.0 s Appartenance, rôles et profil .

Étape 1 : Autoriser l’utilisateur à spécifier ses droits d’accès

Dans une application web réelle, les informations de compte d’un utilisateur indiquent s’il a travaillé pour notre entreprise ou pour un fournisseur particulier, et ces informations sont accessibles par programmation à partir de nos pages de ASP.NET une fois que l’utilisateur s’est connecté au site. Ces informations peuvent être capturées via ASP.NET système de rôles 2.0 s, en tant qu’informations de compte au niveau de l’utilisateur via le système de profil ou par des moyens personnalisés.

Étant donné que l’objectif de ce tutoriel est de démontrer l’ajustement des fonctionnalités de modification des données en fonction de l’utilisateur connecté, et n’est pas destiné à présenter ASP.NET l’appartenance, les rôles et les systèmes de profil 2.0, nous allons utiliser un mécanisme très simple pour déterminer les fonctionnalités de l’utilisateur qui visite la page - une liste déroulante à partir de laquelle l’utilisateur peut indiquer s’il doit être en mesure d’afficher et de modifier les informations des fournisseurs ou, sinon, quelles informations de fournisseur particuliers ils peuvent afficher et modifier. Si l’utilisateur indique qu’il peut afficher et modifier toutes les informations sur les fournisseurs (par défaut), il peut parcourir tous les fournisseurs, modifier les informations d’adresse du fournisseur et modifier le nom et la quantité par unité pour tout produit fourni par le fournisseur sélectionné. Si l’utilisateur indique qu’il ne peut afficher et modifier qu’un fournisseur particulier, il ne peut afficher que les détails et les produits de ce fournisseur et ne peut mettre à jour que le nom et la quantité d’informations par unité pour les produits qui ne sont pas abandonnés.

Notre première étape de ce tutoriel consiste donc à créer cette Liste déroulante et à la remplir avec les fournisseurs dans le système. Ouvrez la UserLevelAccess.aspx page dans le EditInsertDelete dossier, ajoutez un DropDownList dont ID la propriété est définie sur Suppliers, puis liez cette liste déroulante à un nouvel ObjetDataSource nommé AllSuppliersDataSource.

Créer un objetDataSource nommé AllSuppliersDataSource

Figure 3 : Créer un objetDataSource nommé AllSuppliersDataSource (cliquer pour afficher l’image en taille réelle)

Étant donné que nous voulons que cette liste DropDownList inclue tous les fournisseurs, configurez ObjectDataSource pour appeler la SuppliersBLL méthode de classe s GetSuppliers() . Vérifiez également que la méthode ObjectDataSource Update() est mappée à la méthode de classe SuppliersBLL , UpdateSupplierAddress car cette ObjectDataSource sera également utilisée par le DetailsView que nous ajouterons à l’étape 2.

Après avoir terminé l’Assistant ObjectDataSource, effectuez les étapes en configurant la Suppliers Liste déroulante de telle sorte qu’elle affiche le CompanyName champ de données et utilise le SupplierID champ de données comme valeur pour chaque ListItem.

Configurer la liste déroulante Fournisseurs pour utiliser les champs de données CompanyName et SupplierID

Figure 4 : Configurer la Suppliers liste déroulante pour utiliser les CompanyName champs de données et SupplierID (cliquer pour afficher l’image en taille réelle)

À ce stade, le DropDownList répertorie les noms d’entreprise des fournisseurs dans la base de données. Toutefois, nous devons également inclure une option « Afficher/modifier TOUS les fournisseurs » dans la liste déroulante. Pour ce faire, définissez la propriété de AppendDataBoundItems DropDownList surtrue, puis ajoutez un ListItem dont Text la propriété est « Afficher/Modifier TOUS les fournisseurs » et dont la valeur est -1.Suppliers Vous pouvez l’ajouter directement via le balisage déclaratif ou via le Designer en accédant au Fenêtre Propriétés et en cliquant sur les points de suspension dans la propriété DropDownList sItems.

Notes

Reportez-vous au tutoriel Master/Detail Filtering With a DropDownList pour une discussion plus détaillée sur l’ajout d’un élément Sélectionner tout à une liste déroulante de flux de données.

Une fois la AppendDataBoundItems propriété définie et le ListItem ajouté, le balisage déclaratif de DropDownList doit ressembler à :

<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 figure 5 montre une capture d’écran de notre progression actuelle, lorsqu’elle est consultée via un navigateur.

La liste déroulante Fournisseurs contient un élément Afficher tous les éléments list, plus un pour chaque fournisseur

Figure 5 : La Suppliers liste déroulante contient un afficher tout ListItem, plus un pour chaque fournisseur (cliquez pour afficher l’image en taille réelle)

Étant donné que nous voulons mettre à jour l’interface utilisateur immédiatement après que l’utilisateur a modifié sa sélection, définissez la Suppliers propriété trueDropDownList sur AutoPostBack . À l’étape 2, nous allons créer un contrôle DetailsView qui affichera les informations pour les fournisseurs en fonction de la sélection DropDownList. Ensuite, à l’étape 3, nous allons créer un gestionnaire d’événements pour cet événement DropDownList SelectedIndexChanged , dans lequel nous allons ajouter du code qui lie les informations de fournisseur appropriées au DetailsView en fonction du fournisseur sélectionné.

Étape 2 : Ajout d’un contrôle DetailsView

Nous allons utiliser un DetailsView pour afficher les informations du fournisseur. Pour l’utilisateur qui peut afficher et modifier tous les fournisseurs, DetailsView prend en charge la pagination, ce qui permet à l’utilisateur d’parcourir les informations du fournisseur un enregistrement à la fois. Toutefois, si l’utilisateur travaille pour un fournisseur particulier, detailsView affiche uniquement les informations de ce fournisseur et n’inclut pas d’interface de pagination. Dans les deux cas, l’objet DetailsView doit permettre à l’utilisateur de modifier les champs d’adresse, de ville et de pays du fournisseur.

Ajoutez un DetailsView à la page sous DropDownList Suppliers , définissez sa ID propriété sur SupplierDetailset liez-la à l’ObjetDataSource AllSuppliersDataSource créé à l’étape précédente. Ensuite, case activée les cases Activer la pagination et Activer la modification de la balise active DetailsView.

Notes

Si vous ne voyez pas d’option Activer la modification dans la balise active DetailsView, c’est parce que vous n’avez pas mappé la méthode ObjectDataSource à Update() la SuppliersBLL méthode class s UpdateSupplierAddress . Prenez un moment pour revenir en arrière et effectuer cette modification de configuration, après quoi l’option Activer la modification doit apparaître dans la balise active DetailsView.

Étant donné que la SuppliersBLL méthode s de classe n’accepte UpdateSupplierAddress que quatre paramètres - supplierID, address, cityet country - modifiez les BoundFields DetailsView de sorte que les CompanyName et Phone BoundFields soient en lecture seule. En outre, supprimez l’objet SupplierID BoundField. Enfin, ObjectDataSource AllSuppliersDataSource a actuellement sa OldValuesParameterFormatString propriété définie sur original_{0}. Prenez un moment pour supprimer complètement ce paramètre de propriété de la syntaxe déclarative ou définissez-le sur la valeur par défaut, {0}.

Après avoir SupplierDetails configuré DetailsView et AllSuppliersDataSource ObjectDataSource, nous aurons le balisage déclaratif suivant :

<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>

À ce stade, le DetailsView peut être paginé et les informations d’adresse du fournisseur sélectionnés peuvent être mises à jour, quelle que soit la sélection effectuée dans la Suppliers liste déroulante (voir figure 6).

Toutes les informations des fournisseurs peuvent être consultées et leur adresse mise à jour

Figure 6 : Toutes les informations des fournisseurs peuvent être consultées et leur adresse mise à jour (cliquez pour afficher l’image en taille réelle)

Étape 3 : Affichage uniquement des informations du fournisseur sélectionné

Notre page affiche actuellement les informations pour tous les fournisseurs, qu’un fournisseur particulier ait ou non été sélectionné dans la Suppliers liste déroulante. Pour afficher uniquement les informations du fournisseur sélectionné, nous devons ajouter un autre ObjetDataSource à notre page, qui récupère des informations sur un fournisseur particulier.

Ajoutez un nouvel ObjetDataSource à la page, en le nommant SingleSupplierDataSource. À partir de sa balise active, cliquez sur le lien Configurer la source de données et faites-lui utiliser la SuppliersBLL méthode class s GetSupplierBySupplierID(supplierID) . Comme avec ObjectDataSource AllSuppliersDataSource , la SingleSupplierDataSource méthode ObjectDataSource s est Update() mappée à la méthode de classe SuppliersBLL s UpdateSupplierAddress .

Configurer l’objet SingleSupplierDataSource pour utiliser la méthode GetSupplierBySupplierID(supplierID)

Figure 7 : Configurer ObjectDataSource SingleSupplierDataSource pour utiliser la GetSupplierBySupplierID(supplierID) méthode (Cliquer pour afficher l’image en taille réelle)

Ensuite, nous sommes invités à spécifier la source du paramètre pour le paramètre d’entrée de la GetSupplierBySupplierID(supplierID)supplierID méthode. Étant donné que nous voulons afficher les informations du fournisseur sélectionné dans dropDownList, utilisez la Suppliers propriété s de SelectedValue DropDownList comme source de paramètre.

Utiliser la liste déroulante suppliers DropDownList comme source de paramètre supplierID

Figure 8 : Utiliser la Suppliers liste déroulante comme source de supplierID paramètre (cliquer pour afficher l’image en taille réelle)

Même avec ce deuxième ObjectDataSource ajouté, le contrôle DetailsView est actuellement configuré pour toujours utiliser ObjectDataSource AllSuppliersDataSource . Nous devons ajouter une logique pour ajuster la source de données utilisée par DetailsView en fonction de l’élément Suppliers DropDownList sélectionné. Pour ce faire, créez un gestionnaire d’événements SelectedIndexChanged pour suppliers DropDownList. Vous pouvez le créer plus facilement en double-cliquant sur la liste déroulante dans le Designer. Ce gestionnaire d’événements doit déterminer la source de données à utiliser et doit lier les données au DetailsView. Pour ce faire, utilisez le code suivant :

Protected Sub Suppliers_SelectedIndexChanged _
    (ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Suppliers.SelectedIndexChanged
    If Suppliers.SelectedValue = "-1" Then
        ' 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"
    End If
    ' Ensure that the DetailsView and GridView are in read-only mode
    SupplierDetails.ChangeMode(DetailsViewMode.ReadOnly)
    ' Need to "refresh" the DetailsView
    SupplierDetails.DataBind()
End Sub

Le gestionnaire d’événements commence par déterminer si l’option « Afficher/modifier TOUS les fournisseurs » a été sélectionnée. Si c’était le cas, elle définit les SupplierDetails DetailsView sur DataSourceIDAllSuppliersDataSource et retourne l’utilisateur au premier enregistrement dans le jeu de fournisseurs en définissant la PageIndex propriété sur 0. Si, toutefois, l’utilisateur a sélectionné un fournisseur particulier dans la liste déroulante, les DetailsView s sont DataSourceID affectés à SingleSuppliersDataSource. Quelle que soit la source de données utilisée, le SuppliersDetails mode est rétabli en mode lecture seule et les données sont renvoyées au DetailsView par un appel à la SuppliersDetails méthode s du DataBind() contrôle.

Une fois ce gestionnaire d’événements en place, le contrôle DetailsView affiche désormais le fournisseur sélectionné, sauf si l’option « Afficher/Modifier TOUS les fournisseurs » a été sélectionnée, auquel cas tous les fournisseurs peuvent être affichés via l’interface de pagination. La figure 9 montre la page avec l’option « Afficher/Modifier TOUS les fournisseurs » sélectionnée ; notez que l’interface de pagination est présente, ce qui permet à l’utilisateur de visiter et de mettre à jour n’importe quel fournisseur. La figure 10 montre la page avec le fournisseur Ma Maison sélectionné. Seules les informations de Ma Maison sont visibles et modifiables dans ce cas.

Toutes les informations sur les fournisseurs peuvent être consultées et modifiées

Figure 9 : Toutes les informations sur les fournisseurs peuvent être consultées et modifiées (cliquez pour afficher l’image en taille réelle)

Seules les informations sur les fournisseurs sélectionnés peuvent être consultées et modifiées

Figure 10 : Seules les informations du fournisseur sélectionné peuvent être consultées et modifiées (Cliquez pour afficher l’image en taille réelle)

Notes

Pour ce tutoriel, les contrôles EnableViewState DropDownList et DetailsView doivent être définis sur (valeur par défaut), car les modifications apportées aux true propriétés DropDownList SelectedIndex et DetailsView DataSourceID doivent être mémorisées dans les publications.

Étape 4 : Liste des produits fournisseurs dans un GridView modifiable

Une fois le DetailsView terminé, l’étape suivante consiste à inclure un GridView modifiable qui répertorie les produits fournis par le fournisseur sélectionné. Ce GridView doit autoriser les modifications aux champs et QuantityPerUnit uniquementProductName. En outre, si l’utilisateur qui visite la page provient d’un fournisseur particulier, il ne doit autoriser que les mises à jour des produits qui ne sont pas abandonnés. Pour ce faire, nous devons d’abord ajouter une surcharge de la méthode de la ProductsBLL classe qui UpdateProducts accepte uniquement les ProductIDchamps , ProductNameet QuantityPerUnit en tant qu’entrées. Nous avons parcouru ce processus au préalable dans de nombreux tutoriels. Nous allons donc examiner le code ici, qui doit être ajouté à ProductsBLL:

<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Update, False)> _
Public Function UpdateProduct(ByVal productName As String, _
    ByVal quantityPerUnit As String, ByVal productID As Integer) As Boolean
    Dim products As Northwind.ProductsDataTable = Adapter.GetProductByProductID(productID)
    If products.Count = 0 Then
        ' no matching record found, return false
        Return False
    End If
    Dim product As Northwind.ProductsRow = products(0)
    product.ProductName = productName
    If quantityPerUnit Is Nothing Then
        product.SetQuantityPerUnitNull()
    Else
        product.QuantityPerUnit = quantityPerUnit
    End If
    ' Update the product record
    Dim rowsAffected As Integer = Adapter.Update(product)
    ' Return true if precisely one row was updated, otherwise false
    Return rowsAffected = 1
End Function

Une fois cette surcharge créée, nous sommes prêts à ajouter le contrôle GridView et son ObjetDataSource associé. Ajoutez un nouveau GridView à la page, définissez sa ID propriété sur ProductsBySupplieret configurez-la pour utiliser un nouvel ObjetDataSource nommé ProductsBySupplierDataSource. Étant donné que nous voulons que gridView répertorie ces produits par le fournisseur sélectionné, utilisez la ProductsBLL méthode class s GetProductsBySupplierID(supplierID) . Mappez également la Update() méthode à la nouvelle UpdateProduct surcharge que nous venons de créer.

Configurer objectDataSource pour utiliser la surcharge UpdateProduct que vous venez de créer

Figure 11 : Configurer objectDataSource pour utiliser la UpdateProduct surcharge que vous venez de créer (cliquer pour afficher l’image de taille réelle)

Nous avons de nouveau invité à sélectionner la source de paramètre pour le paramètre d’entrée de la GetProductsBySupplierID(supplierID)supplierID méthode. Étant donné que nous voulons afficher les produits du fournisseur sélectionné dans DetailsView, utilisez la SuppliersDetails propriété s du SelectedValue contrôle DetailsView comme source du paramètre.

Utiliser la propriété SelectedValue de SuppliersDetails DetailsView comme source de paramètre

Figure 12 : Utiliser la SuppliersDetails propriété detailsView comme source du SelectedValue paramètre (cliquer pour afficher l’image en taille réelle)

Pour revenir à GridView, supprimez tous les champs GridView à l’exception ProductNamede , QuantityPerUnitet Discontinued, en marquant checkBoxField Discontinued en lecture seule. En outre, case activée l’option Activer la modification à partir de la balise active gridView. Une fois ces modifications effectuées, le balisage déclaratif pour GridView et ObjectDataSource doit ressembler à ce qui suit :

<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>

Comme avec notre précédent ObjectDataSources, cette propriété est OldValuesParameterFormatString définie sur original_{0}, ce qui provoque des problèmes lors de la tentative de mise à jour du nom ou de la quantité d’un produit par unité. Supprimez complètement cette propriété de la syntaxe déclarative ou définissez-la sur sa valeur par défaut, {0}.

Une fois cette configuration terminée, notre page répertorie désormais les produits fournis par le fournisseur sélectionné dans GridView (voir la figure 13). Actuellement, n’importe quel nom ou quantité de produit par unité peut être mis à jour. Toutefois, nous devons mettre à jour notre logique de page afin que cette fonctionnalité soit interdite pour les produits abandonnés pour les utilisateurs associés à un fournisseur particulier. Nous aborderons cette dernière étape à l’étape 5.

Les produits fournis par le fournisseur sélectionné sont affichés

Figure 13 : Les produits fournis par le fournisseur sélectionné sont affichés (cliquez pour afficher l’image en taille réelle)

Notes

Avec l’ajout de ce GridView modifiable, le Suppliers gestionnaire d’événements SelectedIndexChanged DropDownList doit être mis à jour pour renvoyer GridView à un état en lecture seule. Sinon, si un autre fournisseur est sélectionné au milieu de la modification des informations sur le produit, l’index correspondant dans gridView pour le nouveau fournisseur est également modifiable. Pour éviter cela, définissez simplement la propriété -1 de EditIndex GridView sur dans le gestionnaire d’événementsSelectedIndexChanged.

Rappelez-vous également qu’il est important que l’état d’affichage de GridView soit activé (comportement par défaut). Si vous définissez la propriété gridView sur EnableViewStatefalse, vous courez le risque d’avoir des utilisateurs simultanés qui suppriment ou modifient involontairement des enregistrements.

Étape 5 : Interdire la modification pour les produits abandonnés lorsque l’option Afficher/Modifier TOUS les fournisseurs n’est pas sélectionnée

Bien que GridView ProductsBySupplier soit entièrement fonctionnel, il accorde actuellement trop d’accès aux utilisateurs qui proviennent d’un fournisseur particulier. Conformément à nos règles d’entreprise, ces utilisateurs ne doivent pas être en mesure de mettre à jour les produits abandonnés. Pour appliquer cela, nous pouvons masquer (ou désactiver) le bouton Modifier dans ces lignes GridView avec des produits supprimés lorsque la page est visitée par un utilisateur d’un fournisseur.

Créez un gestionnaire d’événements pour l’événement GridView RowDataBound . Dans ce gestionnaire d’événements, nous devons déterminer si l’utilisateur est associé ou non à un fournisseur particulier, ce qui, pour ce didacticiel, peut être déterminé en vérifiant la propriété de Suppliers DropDownList SelectedValue . Si elle est autre que -1, l’utilisateur est associé à un fournisseur particulier. Pour ces utilisateurs, nous devons ensuite déterminer si le produit est abandonné ou non. Nous pouvons récupérer une référence à l’instance réel ProductRow lié à la ligne GridView via la e.Row.DataItem propriété , comme indiqué dans le didacticiel Affichage des informations de résumé dans le pied de page de GridView. Si le produit est abandonné, nous pouvons récupérer une référence par programmation au bouton Modifier dans le Champ de commande GridView en utilisant les techniques décrites dans le tutoriel précédent, Ajout de Client-Side Confirmation lors de la suppression. Une fois que nous avons une référence, nous pouvons masquer ou désactiver le bouton.

Protected Sub ProductsBySupplier_RowDataBound _
    (ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
    Handles ProductsBySupplier.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        ' Is this a supplier-specific user?
        If Suppliers.SelectedValue <> "-1" Then
            ' Get a reference to the ProductRow
            Dim product As Northwind.ProductsRow = _
                CType(CType(e.Row.DataItem, System.Data.DataRowView).Row, _
                Northwind.ProductsRow)
            ' Is this product discontinued?
            If product.Discontinued Then
                ' Get a reference to the Edit LinkButton
                Dim editButton As LinkButton = _
                    CType(e.Row.Cells(0).Controls(0), LinkButton)
                ' Hide the Edit button
                editButton.Visible = False
            End If
        End If
    End If
End Sub

Une fois ce gestionnaire d’événements en place, lorsque vous visitez cette page en tant qu’utilisateur d’un fournisseur spécifique, les produits qui sont abandonnés ne sont pas modifiables, car le bouton Modifier est masqué pour ces produits. Par exemple, Chef Anton s Gumbo Mix est un produit abandonné pour le fournisseur New Orleans Cajun Delights. Lorsque vous visitez la page de ce fournisseur particulier, le bouton Modifier de ce produit est masqué (voir la figure 14). Toutefois, lors de la visite à l’aide de l’option « Afficher/Modifier TOUS les fournisseurs », le bouton Modifier est disponible (voir figure 15).

Pour Supplier-Specific utilisateurs, le bouton Modifier pour Chef Anton s Gumbo Mix est masqué

Figure 14 : Pour Supplier-Specific utilisateurs, le bouton Modifier pour Chef Anton s Gumbo Mix est masqué (cliquez pour afficher l’image en taille réelle)

Pour Afficher/Modifier tous les utilisateurs de fournisseurs, le bouton Modifier pour Chef Anton s Gumbo Mix est affiché

Figure 15 : Pour Afficher/Modifier tous les utilisateurs de fournisseurs, le bouton Modifier pour Chef Anton s Gumbo Mix est affiché (Cliquez pour afficher l’image en taille réelle)

Vérification des droits d’accès dans la couche logique métier

Dans ce tutoriel, la page ASP.NET gère toute la logique en ce qui concerne les informations que l’utilisateur peut voir et les produits qu’il peut mettre à jour. Dans l’idéal, cette logique serait également présente dans la couche logique métier. Par exemple, la méthode de classe SuppliersBLL s GetSuppliers() (qui retourne tous les fournisseurs) peut inclure un case activée pour s’assurer que l’utilisateur actuellement connecté n’est pas associé à un fournisseur spécifique. De même, la UpdateSupplierAddress méthode peut inclure un case activée pour s’assurer que l’utilisateur actuellement connecté a travaillé pour notre entreprise (et peut donc mettre à jour toutes les informations d’adresse des fournisseurs) ou qu’il est associé au fournisseur dont les données sont mises à jour.

Je n’ai pas inclus de telles vérifications de couche BLL ici, car dans notre tutoriel, les droits de l’utilisateur sont déterminés par un DropDownList sur la page, auquel les classes BLL ne peuvent pas accéder. Lors de l’utilisation du système d’appartenance ou de l’un des schémas d’authentification prêtes à l’emploi fournis par ASP.NET (par exemple, Authentification Windows), les informations et les rôles des utilisateurs actuellement connectés sont accessibles à partir de la BLL, ce qui rend ces vérifications des droits d’accès possibles au niveau de la présentation et des couches BLL.

Résumé

La plupart des sites qui fournissent des comptes d’utilisateur doivent personnaliser l’interface de modification des données en fonction de l’utilisateur connecté. Les utilisateurs administratifs peuvent être en mesure de supprimer et de modifier n’importe quel enregistrement, tandis que les utilisateurs non administratifs peuvent être limités à la mise à jour ou à la suppression des enregistrements qu’ils ont créés eux-mêmes. Quel que soit le scénario, les classes contrôles web de données, ObjectDataSource et Couche de logique métier peuvent être étendues pour ajouter ou refuser certaines fonctionnalités en fonction de l’utilisateur connecté. Dans ce tutoriel, nous avons vu comment limiter les données visibles et modifiables selon que l’utilisateur était associé à un fournisseur particulier ou s’il travaillait pour notre entreprise.

Ce tutoriel conclut notre examen de l’insertion, de la mise à jour et de la suppression de données à l’aide des contrôles GridView, DetailsView et FormView. À compter du tutoriel suivant, nous allons nous intéresser à l’ajout de la prise en charge de la pagination et du tri.

Bonne programmation !

À propos de l’auteur

Scott Mitchell, auteur de sept livres ASP/ASP.NET et fondateur de 4GuysFromRolla.com, travaille avec les technologies Web Microsoft depuis 1998. Scott travaille comme consultant indépendant, formateur et écrivain. Son dernier livre est Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Il est accessible à l’adressemitchell@4GuysFromRolla.com . ou via son blog, qui se trouve à l’adresse http://ScottOnWriting.NET.