【问题标题】:how to tell services.AddAuthorization where is my custom user and role table is如何告诉 services.AddAuthorization 我的自定义用户和角色表在哪里
【发布时间】:2021-11-10 19:56:58
【问题描述】:

我只是构建了我的用户和角色策略表以及一个用于连接这些以收集但如何告诉服务的表。AddAuthorization 在哪个表中查找哪个策略。

我已经阅读了 Microsoft 基于角色的授权文档,但他们不使用自定义用户和角色表,我什至不知道如何问我困惑的问题

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

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 任何帮助,请
  • 当你说你构建了一个用户和角色策略表时,这是一个自定义表而不是 Asp.Net Identity 的一部分吗?

标签: asp.net asp.net-core asp.net-authorization


【解决方案1】:

我只是建立了我的用户和角色策略表以及一个用于连接的表 这些要收集,但如何告诉 services.AddAuthorization 来查找 哪个表中的哪个策略。

默认情况下,在微软官方文档中(关于基于角色或基于策略的授权),它使用Asp.net core Identity来管理用户和角色。

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

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

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,可以参考这篇文章并配置策略)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多