将安全问题转移到数据访问层



我正在将所有身份验证和安全问题转移到 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已经在 global.asax 启动时调用的AuthConfig中处理。

AssetRegisterDataLayer.DataAccess.Security.InitializeSecurity();

在我的数据访问层上调用的方法如下所示

public static void InitializeSecurity()
{
    WebSecurity.InitializeDatabaseConnection("AssetRegisterDb","UserProfile","UserId","UserName", false);   
}

当人们使用 MVC4 的开箱即用配置时,我已经看到会发生此问题,其中帐户控制器使用 [InitializeSimpleMembership] 属性装饰,而不是在应用程序启动时调用 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";
}

最新更新