[英]Moving Security Concerns to Data Access Layer
我正在将所有身份验证和安全问题转移到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
中处理, AuthConfig
在global.asax启动时调用。
AssetRegisterDataLayer.DataAccess.Security.InitializeSecurity();
在我的DataAccess层上调用的方法如下所示
public static void InitializeSecurity()
{
WebSecurity.InitializeDatabaseConnection("AssetRegisterDb","UserProfile","UserId","UserName", false);
}
我已经看到当人们使用开箱即用的配置MVC4时会发生这个问题,其中Accounts控制器使用[InitializeSimpleMembership]
属性进行修饰,而不是在应用程序启动时调用WebSecurity初始化程序,但这不是这里的情况。 任何人都知道除了角色之外所有WebSecurity的工作原理?
非常感谢
我发现了自己的错误,如果其他人有类似的问题,我会回答我自己的问题。
我的问题中显示的代码中的错误是实例化一个新的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";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.