Olá, Jônatas.
Tudo bem?
Que legal que você está desenvolvendo um projeto de e-commerce para o seminário da faculdade! Vou te dar um passo a passo básico de como você pode fazer isso com base no artigo da Microsoft que você mencionou.
Passo 1: Configurar o Identity no seu projeto
Primeiro, você precisa configurar o Identity no seu projeto ASP.NET. Se você ainda não fez isso, adicione os pacotes necessários ao seu projeto:
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Passo 2: Configurar os serviços de Identity
No arquivo Startup.cs
, configure os serviços de Identity no método ConfigureServices
:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddControllersWithViews();
services.AddRazorPages();
}
Passo 3: Criar as Roles
Você pode criar as roles no método Configure
do Startup.cs
ou em um serviço específico que rode na inicialização da aplicação. Aqui está um exemplo de como criar as roles no método Configure
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider)
{
// Outras configurações...
CreateRoles(serviceProvider).Wait();
}
private async Task CreateRoles(IServiceProvider serviceProvider)
{
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
string[] roleNames = { "User", "Seller", "Admin" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await roleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
// Criar a role e salvá-la no banco de dados
roleResult = await roleManager.CreateAsync(new IdentityRole(roleName));
}
}
}
Passo 4: Atribuir Roles aos Usuários
Você pode atribuir roles aos usuários no momento do registro ou através de uma funcionalidade de administração. Aqui está um exemplo de como atribuir uma role a um usuário:
public async Task<IActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new IdentityUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
// Atribuir a role ao usuário
await _userManager.AddToRoleAsync(user, "User");
// Código adicional para login do usuário, etc.
}
// Tratamento de erros...
}
// Retornar a view com erros, se houver...
}
Passo 5: Proteger as Rotas com Roles
Por fim, você pode proteger suas rotas usando o atributo [Authorize]
e especificando as roles necessárias:
[Authorize(Roles = "Admin")]
public IActionResult AdminOnly()
{
return View();
}
[Authorize(Roles = "Seller")]
public IActionResult SellerOnly()
{
return View();
}
Basicamente é isso, claro que tem que adaptar de acordo com o código do projeto e fazer os testes.
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.