.NetCore - uprawnienia użytkownika do wykonania operacji

1

Cześć, temat teoretycznie prosty. Czy użytkownik może usunąć rekord w bazie danych? Teoretycznie:

[Authorize]
[HttpDelete("id")]
public async Task<IActionResult> DeleteDaMadafackinRecord(Guid id)
{
    IdentityResult res = await service.DeleteRecord(id);
    if(res.Succeded)
        return Ok();
    else
        return BadRequest();
}

Ale teraz pojawiają się pytania. Co zrobić, jeśli użytkownik chce usunąć nie swój rekord? Jeśli idkami są guidy, to prawdopodobieństwo jest dość małe na złośliwość, ale jest to możliwe, że w jakiś sposób znajdzie istniejący guid. Więc, wymyśliłem bardzo proste rozwiązanie, które załatwia mi cały problem i dodatkowo jest testowalne. A mianowicie, w serwisie zawarłem coś takiego:

public async Task<IdentityResult> DeleteRecord(Guid id)
{
    if(!loggedUserProvider.IsAdmin())
    {
         SystemUser su = await GetOwner(id); //pobieram właściciela tego rekordu
         if(loggedUserProvider.GetLogged() != su)
             return IdentityResult.Failed(...);
    }
    
    await db.DeleteRecord(id);
}

Tak to mniej więcej wygląda. Czyli w serwisie sprawdzam, czy zalogowany użytkownik jest adminem albo właścicielem tego dokumentu. I tylko wtedy pozwalam na usunięcie. Wydaje się to być dobrym rozwiązaniem, jest testowalne i działa. Zastanawiam się jednak, czy są jakieś inne rozwiązania (lepsze/gorsze), zwłaszcza w całym tym tłumie mechanizmów autoryzacji dostępnych w .NetCore 3?

0

Używasz serwisu. Ale np używając takiego MediatR masz coś takie jak RequestPreProcessor czyli np wykonanie jakiś sprawdzeń przed handlarem więc można tak.
https://jimmybogard.com/sharing-context-in-mediatr-pipelines/

1 użytkowników online, w tym zalogowanych: 0, gości: 1