2013-06-04 97 views
1

我有一個互聯網應用程序,連接用戶與Windows身份驗證,當用戶來到辦公室和登錄到Windows會話(與AD信息),他們自動登錄到Web應用程序,我用Windows authentication爲了達成這個。Windows身份驗證和SQLRoleProvider MVC3

所以當我使用@User.Identity.Name它顯示用戶名。現在,如果我想要做的用戶名類似Roles.AddUserToRole(username, "RoleName");它拋出一個異常The user 'Domain\user' was not found.

我的觀點:

@using (Html.BeginForm("AddToRH", "Account", FormMethod.Post)) 
{ 
<div class="form_settings"> 
    <p> 
     <span> 
      @User.Identity.Name 
      @Html.Label("Username") : 
     </span> 
     @Html.Editor("username") 

    </p> 
    <p style="padding-top: 15px"> 
     <span>&nbsp;</span> 
     <input type="submit" value="Enregister" class="submit" /> 
    </p> 
</div> 
} 

我的控制器:

public ActionResult AddToRH(string username) { 
     string[] roles = Roles.GetAllRoles(); 
     Boolean contains = false; 
     foreach (string role in roles) 
     { 
      if(role.Equals("RoleName")){ 
       contains=true; 
      } 
     } 
     if (!contains) { 
      Roles.CreateRole("RoleName"); 
     }    
     Roles.AddUserToRole(username, "RoleName"); 
     return RedirectToAction("Index","Home"); 
    } 

我的web.config:

<authentication mode="Windows"> 

</authentication> 
    <membership defaultProvider="DefaultMembershipProvider"> 
    <providers> 
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/> 
    </providers> 
</membership> 

回答

0

錯誤在於會員的提供者。

類型:

System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"` 

默認情況下,該項目產生的,並沒有使用dbo.aspnet_X表。這就是爲什麼我認爲我無法檢索用戶。

這是一篇文章,對我幫助很大:

http://weblogs.asp.net/scottgu/pages/Recipe_3A00_-Implementing-Role_2D00_Based-Security-with-ASP.NET-2.0-using-Windows-Authentication-and-SQL-Server.aspx

變化也是其他提供商:對於角色我用SQLRoleProvider這樣的類型是:System.Web.Security.SqlRoleProvider和配置文件我用:type="System.Web.Security.SqlProfileProvider"