2013-06-04 2 views
1

У меня есть интернет-приложение, которое подключает пользователей к аутентификации Windows, когда пользователи приходят в офис и выходят на сеанс Windows (с информацией AD), они автоматически регистрируются в веб-приложении, я использовал 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"

Смежные вопросы