ASP .NET Core 3.1 - Usando o Identity de cabo a rabo - XIII
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 décima segunda parte do artigo veremos como criar roles usando a API Identity.
Criando Roles com RoleManager na ASP .NET Core
Usando a API do Identity podemos criar Roles ou Perfis que contém um conjunto de permissões para realizar um conjunto de atividades em nossa aplicação.
Um exemplo de definição de roles que podemos usar seria:
1.
Admin - Para fazer a administração e atribuir
funções aos funcionários;
2. Gerentes - Para cuidar das necessidades do
cliente e funcionários;
3. Netework - Para manter a Internet da em
funcionamento, de maneira segura;
4. Security - Para proteger as instalações da
organização;
Definimos assim 4 roles com um conjunto de permissões e a seguir podemos
atribuir usuários a essas roles.
Para criar,
acessar e gerenciar as roles podemos usar a classe RoleManager
e para representar as roles podemos usar IdentityRole
que possui as seguintes propriedades:
1. Id - fornece um identificador exclusivo da
role;
2. Name - define o nome da role;
3. Users - Retorna uma coleção de objetos
IdentityUserRole que representam membros da role;
Assim a classe
RoleManager executa todas as operações CRUD,
criando, lendo, atualizando e excluindo roles da tabela
AspNetRoles.
Para dizer à classe RoleManager para trabalhar com
a classe IdentityRole, especificamos a classe
IdentityRole como o argumento genérico de
RoleManager. Ex:
RoleManager<IdentityRole>:
public class AdminstrationController : Controller
{
private readonly RoleManager<IdentityRole> roleManager;
public AdministrationController(RoleManager<IdentityRole> roleManager)
{
this.roleManager = roleManager;
}
...
}
|
Aqui a instância de RoleManager será disponibilizada para qualquer controlador ou view pelo sistema de injeção de dependência nativo da ASP .NET Core.
Para iniciar a criação da role precisamos criar uma ViewModel que vamos chamar de CreateRoleViewModel.
Vamos criar esta classe na pasta ViewModels definindo a propriedade RoleName que vai identificar o nome da role:
using System.ComponentModel.DataAnnotations;
namespace FuncionariosWeb.ViewModels
{
public class CreateRoleViewModel
{
[Required]
[Display(Name = "Role")]
public string RoleName { get; set; }
}
}
|
A seguir vamos criar um controlador chamado AdminstrationController onde vamos definir os métodos Action CreateRole para Get e POST para criar uma role.
using FuncionariosWeb.ViewModels;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace FuncionariosWeb.Controllers
{
public class AdministrationController : Controller
{
private readonly RoleManager<IdentityRole> roleManager;
public AdministrationController(RoleManager<IdentityRole> roleManager)
{
this.roleManager = roleManager;
}
[HttpGet]
public IActionResult CreateRole()
{
return View();
}
[HttpPost]
public async Task<IActionResult> CreateRole(CreateRoleViewModel model)
{
if (ModelState.IsValid)
{
// precisamos apenas especificar o nome único da role
IdentityRole identityRole = new IdentityRole
{
Name = model.RoleName
};
// Salva a role na tabela AspNetRole
IdentityResult result = await roleManager.CreateAsync(identityRole);
if (result.Succeeded)
{
return RedirectToAction("index", "home");
}
foreach (IdentityError error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
}
return View(model);
}
}
}
|
Vamos entender o código acima:
Injetamos uma instância de RoleManager no construtor via injeção de dependência nativa da ASP .NET Core.
Especificamos o nome único da Role via propriedade RoleName.
Salvamos a role na tabela AspNetRoles usando o método CreateAsync().
Agora só falta criar a view CreateRole.cshtml.
@model CreateRoleViewModel
@{
ViewBag.Title = "Cria Nova Role";
}
<h3>Criar Role</h3>
<form asp-action="CreateRole" method="post" class="mt-3">
<div asp-validation-summary="All" class="text-danger">
</div>
<div class="form-group row">
<label asp-for="RoleName" class="col-sm-2 col-form-label"></label>
<div class="col-sm-10">
<input asp-for="RoleName" class="form-control" placeholder="Nome">
<span asp-validation-for="RoleName" class="text-danger"></span>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button style="width:auto" type="submit" class="btn btn-primary" style="width:auto">
Criar Nova Role
</button>
</div>
</div>
</form>
|
Pronto. Já temos tudo pronto para criar uma nova role.
Podemos executar nossa aplicação e navegar para http://localhost:XXXX/administration/createrole
E teremos a página para criar a role exibida conforme abaixo:
Vamos incluir o role Admin e clicar no botão Criar Nova Role:
A seguir podemos abrir o banco de dados e verificar na tabela AspNetRoles a nossa role criada:
No próximo artigo veremos como retornar e exibir todas as roles existentes usando o Identity.
"Porque o reino
de Deus não é comida nem bebida, mas justiça, e paz, e alegria no Espírito
Santo."
Romanos 14:17
Referências:
ASP .NET Core - Implementando a segurança com ... - Macoratti
ASP.NET Core MVC - Criando um Dashboard ... - Macoratti.net
C# - Gerando QRCode - Macoratti
ASP .NET - Gerando QRCode com a API do Google
ASP .NET Core - Gerenciador de Despesas ... - Macoratti.net
ASP .NET Core - Acessando dados com Entity ... - Macoratti.net
ASP .NET Core 2 - MiniCurso Básico - Macoratti.net
ASP .NET Core - Implementando a segurança ... - Macoratti.net
Curso ASP .NET Core - Macoratti.net
ASP .NET Core 3.1 - Conteinerizando uma ... - Macoratti.net