2013-03-22 54 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 – 2013-03-22 01:37:41

+1

@Chase:这不是一个双关语。 – Dai 2013-03-22 01:43:38

+1

@Dai阅读OP的代码'model.Password,user.First()。Salt.ToString())'...好的好吧,它不是很清楚,我绝对不好笑... – 2013-03-22 01:47:18

回答

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来解决问题的根源,不幸的是,编码风格将使OP在许多相同类型的问题上留下来。 – 2013-03-22 01:10:06

+0

@ChaseFlorell“web.config”有什么问题?只是它的格式? – Yuck 2013-03-22 01:28:12

+0

只是有很多不相关的信息。在SO上发布之前,从代码中去除不相关的信息是一种很好的做法。 – 2013-03-22 01:31:44