我需要实现单点登录,应该调用Com +组件来验证用户身份。提供角色。简而言之,我需要绕过MVC 4中的默认机制,它尝试访问aspnetdb数据库。所以我开始使用新的MVC4互联网项目,并添加了以下代码。
在Global.asax
public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
bool retval = CreateUserObject("John", "pwd");
}
private bool CreateUserObject(string userName, string password)
{
string[] currentUserRoles = { "Admin", "User" };
GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(userName), currentUserRoles);
HttpContext.Current.User = userPrincipal;
//Thread.CurrentPrincipal = userPrincipal;
return true;
}
在HomeController.cs中,我为“关于”操作添加了[授权]属性,如下所示,它按预期工作
[Authorize]
public ActionResult About()
但是,如果我修改[Authorize]属性以仅允许“Admin”角色如下所示,我会收到运行时错误(在底部)。有没有办法解决这个问题,为登录用户使用我自己的角色集合,而不是查询数据库?我还需要做一些类似于用户配置文件的事情(即,我应该从Com +应用程序填充值而不是数据库。
[Authorize(Roles = "Admin")]
public ActionResult About()
“/”应用程序中的服务器错误。
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)
答案 0 :(得分:2)
也许你需要创建一个Custom RoleProvider,如下所示:
namespace DemoApp.Providers
{
public class MyCustomRoleProvider : System.Web.Security.SqlRoleProvider
{
public override string[] GetRolesForUser(string username)
{
string[] currentUserRoles = { "Admin", "User" };
return currentUserRoles;
}
}
}
在应用程序的web.config中,更改默认角色提供程序:
<system.web>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="DemoApp.Providers.MyCustomRoleProvider, DemoApp"/>
</providers>
</roleManager>
<system.web>