2010-10-18 5 views
0

aide plz avec un problème. J'ai une adhésion configurée avec IIS7, des tables pour cela situées dans ma propre base de données, créées avec l'utilitaire aspnet_regsql, et j'utilise une chaîne de connexion personnalisée pour y accéder.Le fournisseur de rôle d'appartenance ne fonctionne pas avec une chaîne de connexion personnalisée?

Cela fait partie de web.config liées à la participation:

<connectionStrings> 
    <add connectionString="Server=CORESERVER\SQLExpress;Database=Shop;User ID=Tema;Password=Matrix" name="CustomSqlConnection" /> 
</connectionStrings> 
<profile enabled="true"> 
     <providers> 
     <add name="CustomSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" /> 
     </providers> 
</profile> 
<roleManager defaultProvider="AspNetSqlRoleProvider" enabled="true"> 
     <providers> 
     <add name="CustomSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" /> 
     </providers> 
</roleManager> 
<membership defaultProvider="CustomSqlMemberProvider"> 
     <providers> 
     <add name="CustomSqlMemberProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" enablePasswordReset="true" enablePasswordRetrieval="false" passwordFormat="Hashed" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" applicationName="/" maxInvalidPasswordAttempts="10" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" /> 
     </providers> 
</membership> 
<authentication mode="Forms"> 
     <forms cookieless="UseCookies" loginUrl="login.aspx" name="WebShopAuthentication" protection="All" timeout="30" path="/" requireSSL="false" defaultUrl="~/admin/default.aspx" /> 
</authentication> 
<authorization> 
     <allow users="*" /> 
</authorization> 

Et ... l'autorisation des formulaires, obtenir l'utilisateur et ses informations d'adhésion est OK. Mais ... obtenir des rôles est toujours FAUX.

MembershipUser userData = Membership.GetUser(HttpContext.Current.User.Identity.Name); // OK !!! IT IS GREAT :) 
var a = new RolePrincipal(HttpContext.Current.User.Identity); 
var aa = a.getRoles(); // {string[0]} - EMPTY!!! 
var b = Roles.IsUserInRole("Administrator", "Administrator"); // FALSE!!! 
var c = Roles.Providers["CustomSqlRoleProvider"].GetAllRoles(); // {string[0]} - EMPTY!!! 
var d = Roles.IsUserInRole(HttpContext.Current.User.Identity.Name, "Administrator"); // FALSE!!! 
var e = HttpContext.Current.User.IsInRole("Administrator"); // FALSE !!! 

WHYYYY ???

Qu'est-ce que je fais mal ??

+0

Désolé pour une question stupide, mais avez-vous réellement créé des rôles pour les attribuer à l'utilisateur actuel? –

+0

En fait oui. Il y a: 1 fournisseur avec une chaîne de connexion surchargée pointée vers ma base de données, 4 rôles - Administrateur, Client, Gestionnaire, Utilisateur, et 3 utilisateurs nommés Administrateur, Gestionnaire, Client. – Anonymous

Répondre

0

La réponse est que je n'ai pas ajouté paramètre applicationName à web.config correctement - après avoir ajouté i devrait redémarrez IIS et, si nécessaire, recréez des rôles. ceci est une version finale du web.config:

<roleManager defaultProvider="CustomSqlRoleProvider" enabled="true"> 
     <providers> 
     <add name="CustomSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="CustomSqlConnection" applicationName="/" /> 
     </providers> 
    </roleManager> 
0

Juste pour affiner ... l'autorisation fonctionne correctement et utilise correctement les rôles. Une autre partie de mon web.config:

<location path="Admin"> 
    <system.web> 
     <pages styleSheetTheme="Admin" theme="Admin"> 
     </pages> 
     <authorization> 
     <deny users="?" /> 
     <allow roles="Administrator" /> 
     </authorization> 
    </system.web> 
    <appSettings> 
     <add key="ThemeName" value="Admin" /> 
    </appSettings> 
</location> 

Et puis dans le code est utilisé:

Membership.ValidateUser(userName.Text, userPassword.Text) // AND IT WORKS - USER IS LOGGED IN 
Questions connexes