本文介绍了基于策略的授权,仅允许作为资源所有者的用户能够查看/编辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的要求,即在允许查看/编辑资源之前检查登录用户是否为资源的所有者。我已经能够通过签入每个ActionResult来实现这一点,但我希望使用基于策略的授权来实现这一点,文档中没有对此特定要求进行说明。

public IActionResult EditPage(int id)
{
   //Check User is the Owner of the resource
   var signedInUserResouceID = ((ClaimsIdentity)User.Identity).FindFirst("ResourceID");
   if(id != signedInUserResourceID)
   {
      //User cannot Edit this resouce
      return RedirectToAction("Index","Home");
   }
   else
   {
      //Rightful owner, allow editing
   }
}

如何使用基于策略的授权来实现这一点

推荐答案

将以下代码添加到您的Startup.cs:

services.AddHttpContextAccessor();
services.AddAuthorization(options =>
{
    options.AddPolicy("EmployeeOnly", policy =>
    {
        policy.RequireAssertion(context =>
        {
            //Here you can get many resouces from context, i get a claim here for example
            var yourvalue = context.User.FindFirst("ResourceID").Value;
            //here you can get the query string value
            var id = new HttpContextAccessor().HttpContext.Request.Query["id"];
            //return a boolen to end validation.
            return id==yourvalue;
        });
    });
});

控制器:

[Authorize(Policy = "EmployeeOnly")]
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    public IActionResult EditPage(int id)
    {
        //...
    }
}

这篇关于基于策略的授权,仅允许作为资源所有者的用户能够查看/编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 13:50