ASP .NET Core 3.1 - Usando o Identity de cabo a rabo - XXI
Hoje vamos continuar a série de artigos mostrando como usar o ASP .NET Core Identiy na versão 3.1 da ASP .NET .Core e do EF Core. |
Continuando a vigésima parte do artigo veremos como deletar usuários cadastrados.
Deletando usuários cadastrados
Para implementar a exclusão de usuários vamos iniciar alterando o código do botão Deletar na view ListUsers que esta sendo exibida na figura abaixo:
Com fazer a exclusão de dados usando o método Http GET não é recomendado, vamos fazer isso criando um método DeleteUser que vai receber os dados via POST.
Então vamos ter que definir um formulário usando o método POST que vai postar os dados para a Action DeleteUser do controlador AdministrationController passando o Id do usuário :
<form
method="post" asp-action="DeleteUser"
asp-route-id="@user.Id">
<button type="submit" class="btn
btn-danger">Deletar</button>
</form>
Note que o tipo do botão agora é 'submit'.
Abaixo temos o código alterado na view ListUsers.cshtml :
...
<div class="card-footer"> <a asp-action="EditUser" asp-controller="Administration" asp-route-id="@user.Id" class="btn btn-primary">Editar</a> <form method="post" asp-action="DeleteUser" asp-route-id="@user.Id"> <button type="submit" class="btn btn-danger">Deletar</button> </form> </div> ... |
Podemos agora criar o método Action DeleteUser no controlador AdministrationController que vai usar o método DeleteAsync() do serviço UserManager para excluir o usuário selecionado pelo seu id:
public async Task<IActionResult> DeleteUser(string id)
{
var user = await userManager.FindByIdAsync(id);
if (user == null)
{
ViewBag.ErrorMessage = $"Usuário com Id = {id} não foi encontrado";
return View("NotFound");
}
else
{
var result = await userManager.DeleteAsync(user);
if (result.Succeeded)
{
return RedirectToAction("ListUsers");
}
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
return View("ListUsers");
}
}
|
Já temos tudo pronto para excluir um usuário selecionado mas precisamos ter certeza de que o usuário realmente quer realizar esta operação, e, para isso, vamos exibir para o usuário uma solicitação de confirmação da exclusão quando o botão Deletar for clicado.
Vamos usar a mesma lógica que foi usada para excluir uma role e aproveitar a mesma função JavaScript confirmaDelete() que criamos no arquivo CustomScript.js na pasta wwwroot/js.
Assim o código da view ListUsers.cshtml relacionado com os botões Editar e Deletar deve ser alterado conforme abaixo:
@model IEnumerable<ApplicationUser>
@{
ViewBag.Title = "Todos os usuários";
}
<h2>Usuários</h2>
@if (Model.Any())
{
<a asp-action="Register" asp-controller="Account"
class="btn btn-primary mb-3" style="width:auto">
Novo Usuário
</a>
foreach (var user in Model)
{
...
<div class="card-footer">
<div class="card-footer">
<form method="post" asp-action="DeleteUser" asp-route-id="@user.Id">
<a asp-controller="Administration" asp-action="Edituser"
asp-route-id="@user.Id" class="btn btn-primary">Editar</a>
<span id="confirmaDeleteSpan_@user.Id" style="display:none">
<span>Deseja realmente deletar este usuário ?</span>
<button type="submit" class="btn btn-danger">Sim</button>
<a href="#" class="btn btn-primary"
onclick="confirmaDelete('@user.Id', false)">Não</a>
</span>
<span id="deleteSpan_@user.Id">
<a href="#" class="btn btn-danger"
onclick="confirmaDelete('@user.Id', true)">Deletar</a>
</span>
</form>
</div>
</div>
</div>
}
}
...
|
Agora temos que incluir nesta View, no fim do arquivo ListUsers, a seção para acessar o script Javascript:
@section Scripts { <script src="~/js/CustomScript.js"></script> |
Executando o projeto e selecionando um usuário para exclusão temos o resultado a seguir:
No próximo artigo vamos entender como funciona a exclusão em cascata e como impor a integridade referencial de restrição de chave estrangeira ON DELETE NO ACTION no EF Core.
Pegue o projeto aqui: IdentityTotal_GerenciaUsers.zip (sem as referências)
"No princípio
era o Verbo, e o Verbo estava com Deus, e o Verbo era Deus.
Ele estava no princípio com Deus.
Todas as coisas foram feitas por ele, e sem ele nada do que foi feito se fez."
João 1:1-3
Referências:
ASP .NET Core - Implementando a segurança com .. -
ASP.NET Core MVC - Criando um Dashboard .. -
C# - Gerando QRCode - Macoratti
ASP .NET - Gerando QRCode com a API do Google
ASP .NET Core - Gerenciador de Despesas ... -
ASP .NET Core - Acessando dados com Entity ... -
ASP.NET Core Web API - Tratamento de erros -
ASP .NET Core MVC - Tratamento de exceções - II -
ASP .NET Core - CRUD usando Blazor e Entity ... -
ASP .NET Core Blazor - Macoratti.net
Blazor - Vale a pena usar o Blazor -
ASP .NET Core 2 - MiniCurso Básico -
ASP .NET Core - Implementando a segurança ... -
Curso ASP .NET Core - Macoratti.net
ASP .NET Core 3.1 - Conteinerizando uma ... -
ASP .NET - Gerando QRCode com a API do Google