【问题标题】:How can I easily check whether the user submitting a query belongs to them or not in .net core?如何在 .net 核心中轻松检查提交查询的用户是否属于他们?
【发布时间】:2021-06-05 16:01:41
【问题描述】:

授权集

        services.AddAuthorization(options =>
        {
            options.AddPolicy("MustNutritionist", policy =>
                  policy.RequireClaim("nutritionistId"));
        });

控制器

NutritionistUpdateModel 有 id 字段。

[Authorize(Policy = "MustNutritionist")]

    public BaseResponseModel PostEdit([FromForm] NutritionistUpdateModel nutritionistUpdateModel)
    {
        try
        {
            var result = nutritionistService.EditNutritionist(nutritionistUpdateModel);
            if (result)
            {
                return new SuccessResponseModel<bool>(result);

            }
            else
            {
                return new BaseResponseModel(ReadOnlyValues.NutritionistNotFound);
            }
        }
        catch (Exception ex)
        {
            return new BaseResponseModel(ex.Message);
        }
    }

令牌生成声明

claims.Add(new Claim("nutritionistId", nutritionistId.ToString()));

问题

我想检查 NutritionistUpdateModel.Id 和 Claims.nutritionistId 的方程式。我可以检查下面的代码。但是我必须写很多 if else 语句。有什么简单的方法吗?

private bool ChechNutritionistAuthorize(int nutritionistId)
{
    var currentUser = HttpContext.User;
    var nutritionistIdClaim=Int32.Parse(currentUser.Claims.FirstOrDefault(c => c.Type == "NutritionistId").Value);
    if (nutritionistIdClaim == nutritionistId)
    {
        return true;
    }
    else
    {
        return false;
    }
}

【问题讨论】:

  • 您要提交什么查询?
  • 是的,我使用了 HttpPost 方法。我想更新用户数据。

标签: asp.net api .net-core jwt claims-based-identity


【解决方案1】:

像这样使用扩展方法

public static class IdentityExtensions
    {
        public static bool ValidateNutritionistId(this ClaimsPrincipal principal, int nutritionistId)
        {
            if (principal == null)
                throw new ArgumentNullException(nameof(principal));
            int.TryParse(principal.Claims.FirstOrDefault(c => c.Type == "NutritionistId").Value, out int nutritionistIdClaim);
            return nutritionistIdClaim == nutritionistId;
        }


    }

你可以这样使用

HttpContext.User.ValidateNutritionistId(your id here )

您还需要在所有控制器中添加 using 语句并重用相同的方法

【讨论】:

  • 这非常有用,但是这段代码不能实现我想要的功能。因为我必须在控制器方法中编写 if else 语句。
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 2018-05-06
  • 2017-01-05
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
相关资源
最近更新 更多