В ядре идентификации нет замены для RoleManager. Это то же самое, что и было.
По умолчанию необходимо передать класс IdentityRole
в RoleManager
, который является классом роли по умолчанию в Identity.
Если вы хотите расширить IdentityRole
и добавить к нему настраиваемые свойства, вы должны извлечь из IdentityRole
и добавить в него свой собственный реквизит:
public class ApplicationRole : IdentityRole
{
public string MyCustomProp { get; set; }
}
И вы должны зарегистрировать свою пользовательскую Ролевую модель в своих услугах:
services.AddIdentity<IdentityUser, ApplicationRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
С этими изменениями, теперь, когда вы хотите использовать RoleManager
, вы должны передать ему свой новый настроенный ApplicationRole
. Таким образом, Identity будет управлять этим классом вместо стандартного IdentityRole
one:
public class HomeController : ControllerBase
{
private readonly RoleManager<ApplicationRole> _roleManager;
public HomeController(RoleManager<ApplicationRole> roleManager)
{
_roleManager = roleManager;
}
}
И, наконец, если вы хотите расширить / настроить RoleManager
, вы должны передать свою пользовательскую роль в качестве универсального параметра RoleManager
:
public class CustomRoleManager : RoleManager<ApplicationRole>
{
public CustomRoleManager(IRoleStore<ApplicationRole> store,
IEnumerable<IRoleValidator<ApplicationRole>> roleValidators,
ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors,
ILogger<RoleManager<ApplicationRole>> logger) :
base(store, roleValidators, keyNormalizer, errors, logger)
{
}
}