繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM