J'utilise le nouveau système ASP.NET IDENTITY 2.0. Je sais que je peux vérifier si un utilisateur est dans un rôle comme celui-ci: Je suppose que ce code peut être écrit pour vérifier avant que certains code ne soient exécutés, mais qu'en est-il de l'attribut [Autoriser]. J'avais l'habitude de pouvoir dire: P> Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
Source Error:
Line 66: </controls>
Line 67: </pages>
Line 68: <membership>
Line 69: <providers>
Line 70: <!-- ASP.NET Membership is disabled in this template. Please visit the following link http://go.microsoft.com/fwlink/?LinkId=301889 to learn about the ASP.NET Membership support in this template
4 Réponses :
J'ai effectué plusieurs tests et je n'ai pas été en mesure de recréer votre problème. J'ai utilisé des rôles avec et sans espaces et plusieurs rôles. Et tout fonctionne comme prévu.
Comment avez-vous ajouté les rôles? Voici comment je le fais. P> update: p> asp.net comporte trois composants majeurs .. WebForms, MVC et pages Web. Vous utilisez WebForms (non classique ASP.NET ou tout autre terme). P> Il existe plusieurs façons de sécuriser une page par rôle, mais le plus facile est de le faire dans le Web.config en utilisant un emplacement. élément. Encore une fois, cela a rien em> que ce soit à faire avec le fait qu'il s'agissait d'être d'identité ASP.NET ou de rôles de style de style ou autre chose ... Tout fonctionne des interfaces génériques Iprincipal et d'isidité qui font partie de la BASE ASP.NET. Par exemple, les opérateurs suivants permettent à tous les administrateurs d'accéder au site et de noyer tous les autres utilisateurs, mais permet aux utilisateurs du rôle des myousser d'accéder à coolstuff.aspx: p> veuillez être au courant, Si vous utilisez le routage, il est possible que la même page puisse être acheminée vers deux URL différentes, ce qui signifie qu'elle pourrait être accessible d'une URL, mais pas une autre si vous ne faites pas attention à vos autorisations. P> < / p>
Ils ont été créés manuellement en mettant dans la table Aspnetroles. Je crois que c'est là que Rolemanager les met.
Vous devez faire plus que cela. Vous devez également cartographier la table Aspnettuseroles
Oh, cette table est aussi cartographiée. Il a une entrée pour un utilisateur et leur rôle dans celui-ci. Nous ajoutons à un rôle avec ce qui suit, mais il ne semble pas fonctionner si (gestionnaire.addtorole (gestionnaire.findbyName (nom d'utilisateur.text) .Id, "Administrateur de compte client"). Succédé). Je vais mettre cela en édition2. {C.LogActivity ("register.aspx.cs", "reg_USER_ROLE", "régler l'utilisateur au rôle d'administrateur a réussi"); }
@ user2471435 - Oh, je vois ... Autoriser l'attribut fait partie de MVC, il n'est pas utilisé par WebForms, ce que vous utilisez. Vous pouvez spécifier des rôles dans l'élément de localisation web.config
Pouvez-vous montrer un exemple de code en utilisant les rôles d'identité 2? Je savais que c'était stupide classique asp.net
S'il vous plaît voir Edition3 ci-dessus. Je peux toujours arriver à cette page avec la barre d'adresse.
Eh bien, si c'est votre code, il n'est pas bien formé. Vous ne manquez pas le premier << / code>, vous devez également vous assurer qu'il est au niveau de la racine sous la configuration, non enterré ailleurs.
Retirez le ~ / du début du chemin. Il devrait être juste chemin = "admin / par défaut.aspx"
Erik, êtes-vous sûr qu'il devrait être "admin \fault.aspx"? Maintenant, je reçois une erreur de fichier de configuration pour essayer d'accéder à la page, soit en tant qu'administrateur ou non. Je vais montrer cela dans Edit4.
J'ai le même problème. Je souhaite utiliser Autorizeattribute pour permettre à certains appels d'API Web à l'utilisateur de l'administrateur. [Autoriser] fonctionne, mais [Autoriser (rôles = "admin")] ne le fait pas. Les appels API avec [Autoriser (Roles = "admin")] L'exécution est très longue, puis j'ai une exception SQL (incapable de se connecter).
J'ai ajouté le rôle avec le gestionnaire de rôle. Dans mes tables de données, le rôle d'administrateur est lié à mon utilisateur. P>
Il y a quelque chose de bizarre: le rôle est dans les revendications. P>
Si je fais: P>
var claimIdentity = (ClaimsIdentity)HttpContext.Current.User.Identity; var roleClaims = claimIdentity.Claims.Where(c => c.Type == ClaimTypes.Role);
dans l'identité 3 Vous pouvez utiliser ceci:
[Authorize(ClaimTypes.Role, "Administrator")]
Si vous avez un Rolemanager activé dans un fichier web.config comme ceci:
Résolu le problème pour moi! Merci beaucoup (la seule réponse avec 0 note est celle qui a travaillé)
Yikes, c'est un enfer d'une raison de ne pas mettre à niveau. Je suppose que vous pouvez écrire un attribut personnalisé s'il n'y a plus de manière intégrée de le faire.
Vous faites une mauvaise hypothèse. L'attribut autorisant fonctionne simplement bien avec l'identité ASP.NET. La raison en est que l'attribut Authorize ne fonctionne pas avec l'adhésion ou l'identité, cela fonctionne avec Iprincipal et Isidité, qui sont tous deux agnostiques du système. Votre problème est probablement parce que vous avez des espaces dans votre nom ou que vous n'avez pas activé les rôles.
L'erreur vous indique le problème "Cette erreur peut être provoquée par un répertoire virtuel non configuré comme une application dans IIS". Cela me semble que vous avez un web.config dans un répertoire virtuel qui n'est pas configuré comme une application.
J'ai eu un web.config dans le dossier de compte de mon projet mais je l'ai supprimé. Je ne peux pas me débarrasser du problème. J'ai suivi toutes les suggestions dans un point de vue ici mais en vain. Je cours localement dans IIS Express.
J'ai résolu le problème. C'était différent des autres. J'ai eu deux dans le fichier de configuration.