如何解决将参数传递给.NET Core中的自定义策略
我正在开发一个应用程序,我需要实现自定义授权策略。 场景:用户只能在受雇的公司上发出GET请求。
到目前为止,我想出了下面的代码。我不喜欢的是在授权策略中以这种方式companyId
获取_httpContextAccessor.HttpContext.GetRouteData()?.Values["companyId"]
参数,因为将来更改companyId
参数名称可能会很困难,因为它将不可见在控制器方面,此参数也用于授权策略中。
有更好的方法吗?
[HttpGet("{companyId}")]
[Authorize(Policy = "UserEmployedInCompany")]
public ActionResult<CompanyReadDto> GetOne(int companyId)
{
var company = _repository.GetRepository<Company>().Get(companyId);
if (company == null)
{
return NotFound();
}
return _mapper.Map<CompanyReadDto>(company);
}
protected override async System.Threading.Tasks.Task HandleRequirementAsync(AuthorizationHandlerContext context,UserEmployedInCompanyRequirement requirement)
{
var companyIdFromRoute = _httpContextAccessor.HttpContext.GetRouteData()?.Values["companyId"].ToString(); ;
int companyId = 0;
if (companyIdFromRoute is null || !int.TryParse(companyIdFromRoute,out companyId))
{
context.Fail();
}
var company = _repository.GetRepository<Company>()
.Find(x => x.Id == companyId,x => x.Employees).FirstOrDefault();
var currentUser = await _manager.GetUserAsync(context.User);
if (company != null && company.Employees.Exists(x => x.User == currentUser))
{
context.Succeed(requirement);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。