Powiedzmy, że mam aplikację, w której użytkownik może pobierać (tylko swoje) pliki. Gdzie powinno być sprawdzenie tego, czy użytkownik faktycznie jest właścicielem tego pliku? Pomyślałem, żeby zrobić policy-based authorization, i dostałem coś takiego:
public class DownloadFileAuthorizationHandler : AuthorizationHandler<DownloadFilePermission>
{
private readonly ApplicationDbContext dbContext;
private readonly IAuthContext authContext;
public DownloadFileAuthorizationHandler(ApplicationDbContext dbContext, IAuthContext authContext)
{
this.dbContext = dbContext;
this.authContext = authContext;
}
protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, DownloadFilePermission permission)
{
if (context.Resource is AuthorizationFilterContext mvcContext)
{
var currentUserId = authContext.GetCurrentUserId();
var fileId = int.Parse(mvcContext.RouteData.Values["fileId"] as string);
var file = await dbContext.Files.FindAsync(fileId);
if (file?.CreatedById == currentUserId)
{
context.Succeed(permission);
}
}
}
}
Tak to powinno wyglądać?