2010-03-04 8 views
0

Je crée un système d'autorisation de sécurité pour un site de données dynamiques basé sur l'article Securing Dynamic Data Preview 4 Refresh. Le système contient un type d'autorisation supplémentaire: "refuser une opération pour un enregistrement/champ si un enregistrement n'appartient pas à un utilisateur".Créer dynamiquement des tables/colonnes en lecture seule/masquées dans ASP.NET DD

Si un utilisateur ne peut lire que ses propres objets, nous devons avoir un filtre toujours activé dans Liste et vérifier les autorisations dans Détails. Si un utilisateur peut écrire uniquement ses propres objets, nous devons vérifier les permissions dans Editer et Supprimer, supprimer les liens "Editer/Supprimer" de certaines lignes dans la liste, rendre le champ "Utilisateur" en lecture seule et fournir sa valeur dans Insérer. Je ne pensais pas encore aux permissions au niveau des colonnes de ce genre. Donc, le principal problème, comme je le vois en ce moment: trop d'endroits pour placer les mêmes vérifications (je ne pensais même pas aux données POST d'usager malveillant). Aussi je ne pouvais pas faire un champ dans Insert en même temps en lecture seule et avoir une valeur qui est affichée et sauvegardée dans DB (je ne veux pas placer cela dans les classes partielles du modèle car je pense qu'il y a déjà trop d'endroits qui doivent être modifiés pour implémenter cette fonctionnalité).

  1. Existe-t-il un seul endroit pour refuser une opération de lecture ou d'écriture avec un objet en fonction de la valeur de l'objet?
  2. Comment est-ce que je peux fournir une valeur par défaut au champ, de sorte qu'il sera montré sur la page d'insertion, inséré à la DB et ne pourrait pas être changé par l'utilisateur avant l'insertion?

Répondre

0

Ce qui suit suppose que vous utilisez LINQ to SQL.

Y at-il un seul endroit pour refuser une lecture ou d'écriture avec un objet en fonction de la valeur de l'objet?

Reads

Je ne connais aucun moyen plus simple de limiter lit que d'ajouter un filtre à tous les LinqDataSource pertinents contrôles. Si vous pouvez généralement implémenter votre filtre, vous pouvez écrire un gestionnaire QueryCreated, puis ajouter une seule ligne en enregistrant votre gestionnaire personnalisé dans tous les modèles de page.

Rédige

Dans le Dynamic Data metadata, ajoutez une méthode partielle OnValidate à tous les tableaux pertinents. Si l'utilisateur actuel n'est pas autorisé à ChangeAction l'enregistrement donné, lancez une exception. Vous devrez toujours mettre à jour tous les modèles de pages pour masquer les éléments de l'interface utilisateur auxquels l'utilisateur n'a pas accès, mais au moins vous pouvez être assuré que le pire qui puisse arriver dans un cas inattendu est que l'utilisateur voit une page d'erreur.

Comment puis-je fournir une valeur par défaut pour le champ, de sorte qu'il sera affiché sur la page Insertion, insérée dans le DB et ne peut être modifié par l'utilisateur avant d'insérer?

peut-être regarder une combinaison d'ajouter un OnCreated et OnValidate méthodes partielles.Voir aussi: this answer.