Support de cours ASP.NET Dynamic Data Interdire l’accès aux données d’une entité, tutoriel & guide de travaux pratiques ASP.NET en pdf.
Limiter l’accès aux entités du modèle de données
Présentation
Dans ce chapitre, nous allons modifier le comportement de l’application, afin :
– Définir les entités que l’utilisateur peut consulter.
– Définir les champs à afficher et à masquer.
– De définir les opérations CRUD qu’il est possible de réaliser sur les entités.
Interdire l’accès aux données d’une entité
Par défaut, lorsque nous lançons la page d’accueil, l’écran suivant apparaît :
Partons du principe que nous ne voulons pas afficher la table (l’entité) Cours, et ne pouvoir accéder à aucune information sur les cours au travers d’une autre entité, par exemple au travers des stagiaires.
La table Cours est affichée car dans le fichier Global.asax, l’instruction suivante :
// C#
model.RegisterContext(typeof(DotnetFranceEntities), new ContextConfiguration() { ScaffoldAllTables = true });
‘ VB .NET
model.RegisterContext(GetType(DotnetFranceEntities), New ContextConfiguration() With {.ScaffoldAllTables = True})
… permet d’accéder aux données de toutes les tables.
Alors pour interdire la consultation des données concernant les cours des stagiaires, dans le composant DotnetFrance_DAO, nous allons ajouter une classe partielle étendant l’entité Cours. Sur la définition de la classe, nous allons utiliser la métadonnée System.ComponentModel.DataAnnotations.ScaffoldTable, en passant la valeur False en paramètre. Voici le contenu du fichier Cours.cs / Cours.vb :
Dotnet France Association – James RAVAILLE
// C#
namespace DotnetFrance_DAO
{
[System.ComponentModel.DataAnnotations.ScaffoldTable(false)] public partial class Cours
{
<System.ComponentModel.DataAnnotations.ScaffoldTable(False)> _ Partial Public Class Cours
End Class
Pour utiliser la méta-donnée System.ComponentModel.DataAnnotations.ScaffoldTable, il est nécessaire de référencer le composant System.ComponentModel.DataAnnotations.dll dans notre projet.
A noter qu’il est possible d’effectuer l’inverse. Dans le fichier global.asax, il est possible d’écrire l’instruction :
// C#
model.RegisterContext(typeof(DotnetFranceEntities), new ContextConfiguration() { ScaffoldAllTables = false });
‘ VB .NET
model.RegisterContext(GetType(DotnetFranceEntities), New ContextConfiguration() With {.ScaffoldAllTables = false })
Puis, sur pour chaque entité du modèle pour lesquelles ont souhaite autoriser la consultation des données, on effectue la même opération que ci-dessus, en fournissant le paramètre True à la méta-données ScaffoldTable.
Masquer des champs
Par défaut, lors de l’affichage de listes d’entités ou d’un formulaire de détail d’une entité (pour simple consultation ou modification), toutes les propriétés des entités sont affichées. C’est par exemple le cas de la propriété Identifiant des stagiaires, qui est affichée dans la liste des stagiaires et dans le formulaire de détail d’un stagiaire. Etant donné qu’il s’agit d’une donnée purement technique dont le seul but est d’identifier un stagiaire, nous allons la masquer.
Pour ce faire, dans le même esprit que l’affichage / masquage d’une table, nous devons appliquer à la propriété Identifiant de l’entité Stagiaire la métadonnée System.ComponentModel.DataAnnotations.ScaffoldColumn. La difficulté que nous allons rencontrer est que cette propriété a été généré dans le modèle d’entités dotnetFrance.edmx. Voici son implémentation :
// C#
private int _Identifiant;
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(Entit
yKeyProperty=true, IsNullable=false)]
[global::System.Runtime.Serialization.DataMemberAttribute()]
public int Identifiant
{
get
{
return this._Identifiant;
}
set
{
this.OnIdentifiantChanging(value);
this.ReportPropertyChanging(« Identifiant »);
this._Identifiant = global::System.Data.Objects.DataClasses
.StructuralObject.SetValidValue(value); this.ReportPropertyChanged(« Identifiant »); this.OnIdentifiantChanged();
}
}
‘ VB .NET
Private _Identifiant As Integer
<Global.System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(Entity KeyProperty:=True, IsNullable:=False), _
Global.System.Runtime.Serialization.DataMemberAttribute()> _ Public Property Identifiant() As Integer
Get
Return Me._Identifiant
End Get
Set(ByVal value As Integer)
Me.OnIdentifiantChanging(value)
Me.ReportPropertyChanging(« Identifiant »)
Me._Identifiant = Global.System.Data.Objects.DataClasses
.StructuralObject.SetValidValue(value)
Me.ReportPropertyChanged(« Identifiant »)
Me.OnIdentifiantChanged()
End Set
End Property
Si nous modifions ces blocs de code, alors ces modifications seront effacées lors de la prochaine mise à jour du modèle de données. Le moyen proposé par le Framework .NET le suivant :
– Créer une nouvelle classe appelée classe de méta-donnée que nous appellerons Stagiaire_Metadata.
– Dans cette classe, on spécifie au travers de la méta-donnée System.ComponentModel.DataAnnotations.ScaffoldColumn, que la propriété Identifiant ne doit pas être affichée, en passant en paramètre la valeur False :
// C#
public class Stagiaire_Metadata
{
[System.ComponentModel.DataAnnotations.ScaffoldColumn(false)] public int Identifiant;
}
‘ VB .NET
Public Class Stagiaire_Metadata
<System.ComponentModel.DataAnnotations.ScaffoldColumn(False)> _
Public Identifiant As Integer
End Class
– On associe la classe de méta-donnée Stagiaire_Metadata à la l’entité Stagiaire, en appliquant la méta-donnée System.ComponentModel.DataAnnotations.MetadataType à cette dernière :
// C#
[System.ComponentModel.DataAnnotations.MetadataType(typeof(Stagiaire_Meta data))]
public partial class Stagiaire
{
}
‘ VB .NET
<System.ComponentModel.DataAnnotations.MetadataType(GetType(Stagiaire_Met adata))> _
Partial Public Class Stagiaire
End Class
Une fois les projets compilés et l’application exécutée, on obtient les résultats suivant :
CQFD : on peut observer que observer que l’identifiant n’apparaît pas.
La personnalisation des pages et des contrôles utilisateurs
Présentation
Afin d’adapter l’application à différents besoins, il est possible de la personnaliser. Nous allons présenter les personnalisations suivantes :
– Modifications du modèle de page.
Sélection des entités à afficher dans la page d’accueil
La page d’accueil de notre application ASP .NET Dynamic Data est la page Default.aspx. Dans son état actuel, cette page affiche la liste de toutes les entités du méta-modèle, à savoir Groupe, Stagiaire et Cours. Nous ne souhaitons afficher que l’entité Groupe.
Positionnons-nous alors dans la méthode RegisterRoutes du fichier global.asax.
Personnalisation des modèles de page
Les modèles de pages sont des pages ASP .NET utilisées lors de l’exécution de l’application, permettant de naviguer, consulter, ajouter, modifier … les données des entités. Elles sont contenues dans le répertoire DynamicData\PageTemplates de l’application. Il est possible de les mettre à jour dans le but de les adapter à notre besoin et de les personnaliser. Ces modèles de page sont les suivantes :
– List.aspx : cette page permet d’afficher l’ensemble des données d’une entité du méta-modèle dans une grille de données (contrôle GridView), avec la possibilité de filtrer et trier les données pour chaque colonne constituant une clé étrangère ou booléenne.
– ListDetails.aspx : cette page propose des fonctionnalités similaires à la page List.aspx. En supplément, elle propose et un contrôle de type DetailsView pour afficher les données de la ligne sélectionnée, ainsi que pour l’ajout d’un nouvel enregistrement.
– Details.aspx : cette page permet de consulter le détail d’une ligne.
– Edit.aspx : cette page permet de modifier le contenu d’une ligne.
– Insert.aspx : cette page permet de créer une nouvelle instance d’une entité et de la persister dans la base de données.
Modification de l’ensemble des pages
Toutes ces pages sont des pages de contenu, qui fournissent du contenu à la Master Page nommé Site.master et située à la racine de l’application, dans laquelle elles s’exécutent. En modifiant cette Master Page, vous modifiez l’affichage de toutes ces pages.
Pour illustrer ce propos, nous allons apporter à la page maître les modifications suivantes :
– Ajouter le logo de Dotnet-France en entête de page.
– Modifier le nom de l’application en l’appelant Dotnet-France Student Manager.
Pour appliquer ces modifications, positionnons-nous dans le code XHTML de la page maître, et apportons les modifications suivantes :
// XHTML
Bloc de code initial :
<h1><span class= »allcaps »>Site Dynamic Data</span></h1>
Bloc de code modifié :
<h1><span class= »allcaps » id= »TitrePage »>Dotnet-France Student Manager</span></h1>
Après avoir copié une image dans le répertoire DynamicData/Content/Images, ajoutons dans la feuille de style CSS, la règle CSS suivante :
// CSS
#TitrePage
{
background-
image:url(« DynamicData/Content/Images/LogoDotnetFrance.jpg »);
background-repeat:no-repeat;
padding-left:150px;
1 Introduction
1.1 Présentation
1.2 Pré-requis
1.3 Quelques rappels sur l’application
2 Limiter l’accès aux entités du modèle de données
2.1 Présentation
2.2 Interdire l’accès aux données d’une entité
2.3 Masquer des champs
2.4 Personnalisation du routage
3 La personnalisation des pages et des contrôles utilisateurs
3.1 Présentation
3.2 Sélection des entités à afficher dans la page d’accueil
3.3 Personnalisation des modèles de page
3.3.1 Modification de l’ensemble des pages
3.4 Personnalisation des propriétés de navigation
3.5 Personnalisation des contraintes sur les données
3.6 Personnalisation de l’affichage des données dans les champs
4 Conclusion