Я создал веб-страницу через Visual Studio 2017, используя веб-формы ASP.NET.
Я использую встроенное управление пользователями и создал несколько пользователей.
Теперь я хочу использовать ролевую функцию.
Сначала я включил roleManager, но потом получаю новую ошибку «Не удалось найти хранимую процедуру dbo.aspnet_CheckSchemaVersion»
Я пытался использовать aspnet_regsql.exe для добавления необходимых частей в базу данных, но теперь у меня в базе данных два типа таблиц: AspNetUsers и aspnet_Users.
Что мне нужно сделать, чтобы включить роли со старой схемой AspNet?





Вам нужно настроить поставщика ролей/поставщика членства по умолчанию в web.config и запустить aspnet_regsql.exe для вашей базы данных.
вот документация: 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);
}
Я не хочу заменять существующее управление пользователями версией, созданной aspnet_regsql.ese, потому что у меня уже запущено управление пользователями, и я хочу только активировать управление ролями. То, что вы показываете, это то, что вы можете найти повсюду, но для этого мне нужно перенести все существующие данные на новые схемы.
Я думаю, что поставщик управления ролями и поставщик членства — это две разные вещи. Вам не нужно использовать часть членства/профиля, созданную aspnet_regsql.exe. Просто измените web.config, чтобы использовать предпочитаемого поставщика членства, как если бы вы использовали поставщика ролей.
Нормально, но, как? Способ, который вы показали, не работает, потому что, если я попытаюсь добавить роль (Roles.CreateRole()), меня попросят выполнить функцию в соответствии с новой схемой.
Стандартные веб-формы, созданные с помощью VisualStudio с использованием Microsoft.AspNet.Identity, поэтому база данных также создается для использования схемы 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.
Вот что я нашел в гугле. Я делал это раньше, поэтому я получаю новые таблицы, например. aspnet_Users вместо AspNetUsers. Но на самом деле вся страница настроена на использование старых схем. Насколько я понимаю, похоже, что я настраиваю модуль идентификации с aspnet_regsql.exe, а не со старым модулем членства, который фактически используется.