我正在将所有身份验证和安全问题转移到ASP.NET MVC4 Internet应用程序上的数据访问层中。登录,注销,创建用户等一切都很好,但我在向用户添加角色方面遇到了绊脚石。
创建用户帐户后,我想将它们添加到某些默认角色。这样做的方法如下所示
public static string CreateUserAccount(string username, string password)
{
WebSecurity.CreateUserAndAccount(username, password);
var roleProvider = new SimpleRoleProvider();
roleProvider.AddUsersToRoles(new[] {username}, new[] {"MeterInfo", "SiteInfo", "AMRInfo", "InstallImages"});
return username + " Account Created";
}
调用WebSecurity
来创建帐户是可以的,但我使用SimpleRoleProvider
会导致此错误
在调用“WebSecurity”类的任何其他方法之前,必须调用“WebSecurity.InitializeDatabaseConnection”方法。此调用应放在站点根目录中的_AppStart.cshtml文件中。
InitializeDatabaseConnection
已在AuthConfig
中处理,并在global.asax启动时调用。
AssetRegisterDataLayer.DataAccess.Security.InitializeSecurity();
在我的DataAccess层上调用的方法如下所示
public static void InitializeSecurity()
{
WebSecurity.InitializeDatabaseConnection("AssetRegisterDb","UserProfile","UserId","UserName", false);
}
我已经看到当人们使用开箱即用的配置进行MVC4时会发生此问题,其中Accounts控制器使用[InitializeSimpleMembership]
属性进行修饰,而不是在应用程序启动时调用WebSecurity初始化程序,但事实并非如此这里。任何人都知道除了角色之外所有WebSecurity的工作原理?
非常感谢
答案 0 :(得分:1)
我发现了自己的错误,如果其他人有类似的问题,我会回答我自己的问题。
我的问题中显示的代码中的错误是实例化一个新的SimpleRoleProvider
。我应该这样做
public static string CreateUserAccount(string username, string password)
{
WebSecurity.CreateUserAndAccount(username, password);
var roleProvider = (SimpleRoleProvider)Roles.Provider;
roleProvider.AddUsersToRoles(new[] {username}, new[] {"MeterInfo", "SiteInfo", "AMRInfo", "InstallImages"});
return username + " Account Created";
}