【发布时间】:2020-09-02 13:36:17
【问题描述】:
堆栈是最新的带有 C# 的 .NET Core。
我们将相同的代码粘贴到几乎每个控制器中:
if (User.GetProfileId() != profileId)
return Unauthorized();
我不知道如何删除这种冗余。我绝对可以添加通用中间件或filter 来执行此操作,但它似乎很笨拙。是否有一些方法可以添加 [MustOwnProfile] 属性并让 .NET Core 在属性出现的任何位置运行上述代码中的测试?
上述检查在上下文中的示例:
[HttpPost]
[Route("{profileId:int}/start-profile/{checklistId:int}")]
[Authorize]
public async Task<IActionResult> StartProfile(int profileId, int checklistId)
{
if (User.GetProfileId() != profileId)
return Unauthorized();
await _profileService.StartProfile(profileId, checklistId);
return Ok();
}
【问题讨论】:
-
我假设授权用户只能编辑自己的个人资料,那么我认为 'User.IsAuthenticated())' 应该足以进行此检查。
标签: c# .net-core asp.net-apicontroller