如何告诉 services.AddAuthorization 我的自定义用户和角色 table 在哪里

how to tell services.AddAuthorization where is my custom user and role table is

我只是建立了我的用户和角色策略 table 和一个 table 用于连接这些以收集但是如何告诉 services.AddAuthorization 寻找哪个策略 table.

我看过Microsoft Role-based authorization的文档,但是他们没有使用自定义用户和角色table我什至不知道怎么问我的问题我很困惑

我的意思是它怎么知道我们在这张图片中寻找管理员

I just build my user and role policy table and a table for connecting these to gather but how to tell services.AddAuthorization to looking for which policy in which table.

微软官方文档(关于Role-based or Policy-based authorization)默认使用Asp.net core Identity来管理用户和角色。

根据你的描述,我假设你也使用Asp.net身份页面登录和注销,对吧?如果是这样,由于您使用的是自定义用户和角色 table,在 Login.cshtml.cs 文件中,用户登录成功后,您可以根据登录用户的电子邮件查询此 table并获得用户的角色。然后将角色声明添加到当前用户。之后,您可以根据声明创建策略。

您可以查看下面的示例代码:

Login.cshtml.cs页中:

var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
    //find current user.
    var user = await _userManager.FindByEmailAsync(Input.Email);
    //based on user information to query the user and role policy table. Here I set the user role directly.
    var userrole = "User";
    if (user.UserName.Contains("aa"))
    { 
        userrole = "Admin";
    }

    //add claims to current user. 
    await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, userrole));
    var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);
    await _signInManager.RefreshSignInAsync(user);

    _logger.LogInformation("User logged in.");
    return LocalRedirect(returnUrl);
}

在 ConfigureServices 方法中,创建基于声明的策略。

services.AddAuthorization(options =>
{
    options.AddPolicy("RequiredAdmin", policy =>
        policy.RequireClaim(ClaimTypes.Role, "Admin"));
});

然后,在Configure方法中,添加如下代码:

app.UseAuthentication();
app.UseAuthorization();

并将策略应用于操作方法:

    [Authorize(Policy = "RequiredAdmin")]
    public IActionResult Privacy()
    { 
        return View();
    }

结果如下:用户aa是Admin角色,bb是User角色。

此外,这里还有一些相关的文章,大家可以参考一下:

Policy-based authorization in ASP.NET Core

Policy-Based And Role-Based Authorization In ASP.NET Core 3.0 Using Custom Handler

Cookie Authentication In ASP.NET Core(如果不使用Asp.net core Identity,可以参考这篇文章配置策略)