Comment puis-je restreindre l'accès à certaines pages ASP.NET MVC?
Je souhaite verrouiller l'accès à un utilisateur de MODIFIER la page (par exemple. /user/pure.krome/edit) si
a) l'Identité.IsAuthenticated = false
ou ils sont authentifiés mais
b) Idenitity.Nom != nom d'utilisateur de l'utilisateur page, ils essaient de modifier
c) l'Identité.UserType() != UserType.Administrateur //C'est comme un Rôle, sans l'aide de RoleProviders.
Je suis en supposant que u peut décorer d'un contrôleur ou d'un contrôleur de la méthode d'action avec quelque chose(s), mais je ne suis pas sûr de ce que?
OriginalL'auteur Pure.Krome | 2009-06-03
Vous devez vous connecter pour publier un commentaire.
Regarder la
AuthorizeAttribute
.ASP.Net MVC: le AuthorizeAttribute être surchargée?
OriginalL'auteur Daniel A. White
Un attribut personnalisé dérivé de AuthorizeAttribute est ce que j'utilise pour ce faire. Remplacer le OnAuthorize méthode et de mettre en œuvre votre propre logique.
Le AuthorizationContext paramètre inclut des références à la manette, HttpContext, ResultContext, RouteData, et le Résultat. Vous devriez être en mesure d'obtenir tout ce que vous devez à partir de la RouteData. Pour généraliser, ajouter une propriété à votre attribut permet de spécifier les données sur le parcours de la clé à utiliser pour le nom de l'utilisateur. Vous aurez à faire de la bd des trucs à vérifier que l'utilisateur du type de façon indépendante. Vous pourriez avoir deux constructeurs: celle qui prend le plus de votre base de données de contexte ou de la couche d'interface et un autre qui ne prend aucun paramètre et crée de la valeur par défaut de la base de données de contexte ou de la couche. L'utilisation de l'ancienne, dans des tests unitaires.
OriginalL'auteur tvanfosson
J'ai mis en application les ActionFilterAttribute et il fonctionne à gérer à la fois l'authentification et les rôles. Je suis le stockage des rôles dans ma DB tables comme ceci:
Je l'appelle comme ça...
Mikerennick, faites-vous toute la mise en cache des utilisateurs ou rôles?
Je ne suis pas en utilisant la mise en cache, mais je ne vois pas pourquoi la liste des rôles attribués à un utilisateur ne peut pas être mis en cache. Vous pourriez mettre à jour le cache lorsque des modifications sont apportées aux rôles attribués. Le code ci-dessus n'a aucune incidence sur la mise en cache des utilisateurs, comme je suis simplement à la recherche à httpcontext pour l'utilisateur actuel. Je devrais aussi mentionner que l'ajout d'une case pour permettre aux utilisateurs est la même en principe que le test permettait de rôles.
OriginalL'auteur mikerennick