Como faríamos uma restrição de determinada entidade, como por exemplo uma postegem, só pudesse ser editada ou deletada pelo usuário que a criou?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Como faríamos uma restrição de determinada entidade, como por exemplo uma postegem, só pudesse ser editada ou deletada pelo usuário que a criou?
Olá Josias
Para restringir que apenas o usuário que criou uma determinada entidade possa editá-la ou excluí-la, você pode utilizar o recurso de autorização do ASP.NET Identity.
Uma maneira de fazer isso é verificar o ID do usuário logado e compará-lo com o ID do usuário que criou a entidade. Se forem iguais, o usuário tem permissão para editar ou excluir a entidade. Caso contrário, ele será impedido de realizar essas ações.
Aqui está um exemplo de como você pode implementar essa restrição em um controlador de uma API:
[HttpDelete("{id}")]
[Authorize]
public async Task<IActionResult> Delete(int id)
{
var entity = await _context.Entidades.FindAsync(id);
if (entity == null)
{
return NotFound();
}
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (entity.UserId != userId)
{
return Forbid();
}
_context.Entidades.Remove(entity);
await _context.SaveChangesAsync();
return NoContent();
}
Nesse exemplo, o método Delete recebe o ID da entidade a ser excluída. Primeiro, é verificado se a entidade existe. Em seguida, o ID do usuário logado é obtido através do User.FindFirstValue(ClaimTypes.NameIdentifier). Por fim, é feita a comparação entre o ID do usuário logado e o ID do usuário que criou a entidade. Se forem diferentes, é retornado um status de proibido (Forbid). Caso contrário, a entidade é removida do contexto e as mudanças são salvas no banco de dados.
Espero que isso ajude! Se tiver mais alguma dúvida, é só me dizer. Bons estudos!
Espero ter ajudado e bons estudos!