簡體   English   中英

使用單獨的類獲取asp.net核心身份中的所有角色

[英]Get all roles in asp.net core identity using a separate class

我一直試圖從asp.net核心標識中獲取所有角色的列表,這是在使用控制器之前完成的工作:

public AdminController(
        UserManager<ApplicationUser> userManager,
        ILogger<AccountController> logger,
        IEmailSender emailSender,
        RoleManager<IdentityRole> roleManager,
        SignInManager<ApplicationUser> signInManager)
    {
        _userManager = userManager;
        _logger = logger;
        _emailSender = emailSender;
        _roleManager = roleManager;
        _signInManager = signInManager;
    }

private void PuplateRolesList(RegisterViewModel model)
    {
        model.Roles = _roleManager.Roles?.ToList();
    }

我想做的是有一個我可以重用的類,該類將返回所有角色的列表,而不使用控制器,我嘗試這樣做:

var roleStore = new RoleStore<AppRole, int, AppUserRole>(dbContext);
var roleMngr = new RoleManager<AppRole, int>(roleStore);

但是在一個類中,它顯然沒有構造角色管理器或dbContect,因此我自己嘗試了一下,但它不起作用。 關於如何在應用程序中添加類的任何想法都可以提供列表或角色,以至於我的控制器中沒有全部內容?

謝謝

創建一個類:

public class RoleUtility 
{
    private readonly RoleManager<IdentityRole> _roleManager;

    public RoleUtility(RoleManager<IdentityRole> roleManager)
    {
        _roleManager = roleManager;
    }

    public void PopulateRolesList(RegisterViewModel model)
    {
        model.Roles = _roleManager.Roles?.ToList();
    }
}

提取接口:

public interface IRoleUtility
{
    void PopulateRolesList(RegisterViewModel model);
}

RoleUtility類聲明變為:

public class RoleUtility: IRoleUtility

然后,在您的Startup類中:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddTransient<IRoleUtility, RoleUtility>();
}

您的控制器代碼變為:

public AdminController(
        UserManager<ApplicationUser> userManager,
        ILogger<AccountController> logger,
        IEmailSender emailSender,
        IRoleUtility roleUtility,
        SignInManager<ApplicationUser> signInManager)
    {
        _userManager = userManager;
        _logger = logger;
        _emailSender = emailSender;
        _roleUtility = roleUtility;
        _signInManager = signInManager;
    }

private void PuplateRolesList(RegisterViewModel model)
    {
        _roleUtility.PopulateRolesList(model);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM