2013-03-22 3 views
0

Я использую ASP.net MVC. Поэтому я хочу установить роль пользователя в тоске.Как установить роль пользователя в MVC?

Так что это мой контроллер

public ActionResult LogOn(LogOnModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    {     
     var user = GetuserByname(model.UserName); 
     if (user.ToList().Count == 1) 
     { 
      string dbPassword = user.First().UserPassword.ToString(); 
      string enterPassword = CreatePasswordHash(model.Password, user.First().Salt.ToString()); 

      if (dbPassword.ToString().Trim() == enterPassword.ToString().Trim()) 
      { 
       FormsAuthentication.SetAuthCookie(user.First().tblUserRole.RoleName, model.RememberMe); 
       Session["logged"] = user.First().Username; 


       string roleName = user.First().tblUserRole.RoleName; 
       Roles.AddUserToRole(model.UserName, roleName); 
       return RedirectToAction("Index", "Home"); 
      } 
     }     
    }    
    return View(model); 
} 

Это мой WebConfig файл

<?xml version="1.0" encoding="utf-8"?> 

<configuration> 

    <connectionStrings> 
     <add name="ApplicationServices1" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 
     <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> 
     <add name="SKGEntities" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=(local);Initial Catalog=SKG;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

    <authentication mode="Forms"> 
     <forms loginUrl="~/Login/LogOn" timeout="2880" /> 
    </authentication> 

    <membership> 
     <providers> 
      <clear /> 
      <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
     </providers> 
    </membership> 

    <profile> 
     <providers> 
      <clear /> 
      <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
     </providers> 
    </profile> 

    <roleManager enabled="true"> 
     <providers> 
      <clear /> 
      <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
      <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
     </providers> 
    </roleManager> 

</configuration> 

Но есть ошибка, и это говорит ...

сеть связанных или экземпляр -специфическая ошибка при установлении соединения с SQL Server

... Я не знаю, как это исправить.

Кроме того, как я могу установить ...

Roles.AddUserToRole(xxx, yyy); 

... в мой контроллер?

спасибо.

+0

Итак, по отдельной теме ... просто слово совета, очистка вашего кода контроллера, чтобы сделать его немного более читаемым, действительно поможет следующему парню по дороге. Вот предложение, возьмите его с солью (не каламбур). Это просто предложение, которое может помочь вам ... https://gist.github.com/ChaseFlorell/5218298 –

+1

@Chase: это не был каламбур в первую очередь. – Dai

+1

@ Дай читает код OP 'model.Password, user.First(). Salt.ToString())' ... ОК, это не совсем понятно, и я определенно не смешон ... –

ответ

3

В сообщении об ошибке говорится, что ваша база данных, сервер SQL, недоступна.

Ваши поставщики (роль, членство, профильные) устанавливаются использовать строку в ApplicationServices соединение, которое:

data source=.\SQLEXPRESS; 
Integrated Security=SSPI; 
AttachDBFilename=|DataDirectory|aspnetdb.mdf; 
User Instance=true 

... Однако ваша вторая строка соединения

Data Source=(local); 
Initial Catalog=SKG; 
Integrated Security=True; 
MultipleActiveResultSets=True 

. .. который является другим сервером базы данных полностью.

Измените конфигурацию своего поставщика, чтобы использовать правильный сервер базы данных.

+0

Форматирование вопроса сводило меня с ума, поэтому я больше сосредоточился на его исправлении и меньше сосредоточился на ответе на вопрос. +1 для того, чтобы добраться до корня проблемы, к сожалению, стиль кодирования собирается оставить ОП с гораздо большим количеством тех же самых типов проблем в будущем. –

+0

@ChaseFlorell Что случилось с 'web.config'? Просто форматирование? – Yuck

+0

Просто в нем было много нерелевантной информации. Это хорошая практика, чтобы удалить ненужную информацию из вашего кода, прежде чем отправлять ее на SO. –

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