Asp.net WebForms 启用角色

Asp.net WebForms Enable Roles

我在 Visual Studio 2017 年使用 ASP.NET WebForms 创建了一个网页。

我正在使用内置的用户管理并创建了一些用户。

现在我想使用角色功能。

首先我启用了 roleManager,但随后出现新错误 "Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion"

我尝试使用 aspnet_regsql.exe 将必要的部分添加到数据库中,但现在我的数据库中有两种表:AspNetUsers 和 aspnet_Users。

我需要做什么才能使用旧的 AspNet-Schematic 启用角色?

您必须针对您的数据库在 web.config 和 运行 aspnet_regsql.exe 中配置默认​​角色 provider/membership 提供商。

这是文档: https://docs.microsoft.com/en-us/aspnet/web-forms/overview/older-versions-security/membership/creating-the-membership-schema-in-sql-server-cs

  <system.web>
    <roleManager enabled="true" cacheRolesInCookie="false" defaultProvider="AspNetSqlRoleProvider">
      <providers>
        <clear />
        <add applicationName="app-name" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="roleManagerSqlConnString" />
        <add applicationName="app-name" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
      </providers>
    </roleManager>
  </system.web> 
using System.Web.Security;

                string userName = HttpContext.Current.User.Identity.Name;
                if (!Roles.IsUserInRole(roleName))
                {
                    Roles.AddUserToRole(userName, roleName);
                }

使用 Microsoft.AspNet.Identity 使用 VisualStudio 创建的标准 WebForms,因此还创建了数据库以使用 Microsoft.AspNet.Identity 的示意图。

因此您必须使用 RoleManager 添加角色:

string roleName = "role";
var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

if (!roleManager.RoleExists(roleName))
{
    var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole();
    role.Name = TextBoxRole.Text;
    roleManager.Create(roleName);
}

System.Web.Security 有自己的原理图,不适用于 Microsoft.AspNet.Identity