【问题标题】:Moving Security Concerns to Data Access Layer将安全问题转移到数据访问层
【发布时间】:2013-05-31 09:25:52
【问题描述】:

我正在将所有身份验证和安全问题转移到我的 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();

在我的 DataAccess 层上调用的方法如下所示

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

我已经看到当人们使用开箱即用的 MVC4 配置时会发生此问题,其中 Accounts 控制器使用 [InitializeSimpleMembership] 属性装饰,而不是在应用程序启动时调用 WebSecurity 初始化程序,但这里不是这种情况。任何人都知道为什么除了角色之外所有的 WebSecurity 都有效吗?

非常感谢

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4


    【解决方案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";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2014-01-01
      • 2017-03-16
      • 1970-01-01
      • 2011-07-20
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多