本文介绍了基于策略的授权,仅允许作为资源所有者的用户能够查看/编辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个简单的要求,即在允许查看/编辑资源之前检查登录用户是否为资源的所有者。我已经能够通过签入每个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)
{
//...
}
}
这篇关于基于策略的授权,仅允许作为资源所有者的用户能够查看/编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!