2011-01-07 6 views
0

Je suis un membre MVC relatif venant de WebForms. Je pense que j'ai une assez bonne compréhension de MVC avec quelques exceptions, et je pense que j'ai peut-être brisé le modèle. Je vais essayer de rester bref, donc je suppose que la plupart de ce que je demande est relativement évident.Routage et sécurité MVC2: comment transmettre des paramètres en toute sécurité?

Disons que j'ai un site de nouvelles avec des articles. Dans ce cas, une URL sous la forme de mynewssite.com/Articles/123 fonctionne très bien parce que je me fous de qui regarde quel article. L'utilisateur peut changer l'articleID dans l'URL à tout ce qu'ils veulent et remonter cet article. Dans mon cas, cependant, je veux seulement que l'utilisateur puisse voir/éditer des entités de données (articles, ou peu importe) qui leur appartiennent. Pour ce faire, j'utilise leur ID utilisateur (GUID) en tant que clé étrangère dans la base de données et affiche une liste de leurs données parmi lesquelles choisir. Voici le problème ... quand ils cliquent sur le lien qui est créé par Url.Action ("Modifier", Nouveau Avec {.id = item.id}) (Je n'utilise pas ActionLink parce que j'ai besoin d'ajouter du contenu HTML à l'intérieur du lien), l'identificateur apparaît comme un paramètre de chaîne de requête. Je pourrais ajouter une route pour cela, mais l'identifiant apparaîtrait toujours dans l'URL pour qu'ils falsifient. L'implication évidente est qu'en falsifiant l'URL, ils pourraient voir/éditer n'importe quelle entité qu'ils veulent.

Qu'est-ce qui me manque? Existe-t-il un bon moyen de transmettre les paramètres sans les ajouter dans l'URL? Je sais que je pourrais les mettre dans un formulaire sur la page et soumettre le formulaire, mais cela semble lourd pour mon exemple, et j'utilise jQuery.ajax dans des endroits qui semblent entrer en conflit avec cette idée. Je pourrais également vérifier leur UserID contre les données dans la méthode d'édition, mais cela semble également lourd, aussi.

Cette question est-elle trop générale? S'il vous plaît laissez-moi savoir quelles sont les spécificités dont vous avez besoin. Merci.

Répondre

0

Même dans Winforms, vous devez ajouter une logique spéciale sur chaque requête pour filtrer uniquement les articles que l'utilisateur possède. Je ne vois pas pourquoi MVC devrait être différent. Bien sûr, vous pouvez utiliser web.config pour refuser l'accès à une URL donnée, mais pas lorsque vous utilisez une seule page qui prend un paramètre de quelles données afficher.

Votre meilleur pari est probablement de filtrer cela au niveau de la base de données. En ajoutant une clause where qui inclut l'identifiant de l'utilisateur, l'application renverra une sorte d'erreur "aucun enregistrement trouvé" et vous pourrez faire ce que vous voulez avec.

0

Vous pouvez utiliser forms authentication. De cette façon, lorsque l'utilisateur authentifie un cookie crypté, celui-ci contient son nom d'utilisateur qui ne peut être altéré. Ensuite, vous pouvez vérifier si l'utilisateur actuellement connecté dispose d'autorisations pour modifier cet article.

+0

Merci pour votre réponse. J'utilise l'authentification par formulaire. Je ne pense pas que je devrais avoir à vérifier si l'utilisateur a la permission pour ces données sur chaque demande. Peut-être que c'est parce que je suis habitué à WebForms où je peux juste sécuriser un dossier (avec FA) et être fait avec lui. Ma question principale est de savoir quelle est la meilleure façon de passer les paramètres dans ce type de situation. Je veux m'assurer que j'utilise MVC de la bonne façon. –

Questions connexes