Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Com base no curso, como aplico as Roles?

Com base neste curso estou desenvolvendo um projeto para o seminário da faculdade. O projeto é um e-commerce, e necessito criar 3 tipos de usuários (o usuário comum, os vendedores e os administradores), cada um com sua função. Vi em algumas pesquisas que é necessário criar Roles no sistema e, para cada registro de usuário, eu ligaria em um tipo de Role... porém estou com dificuldade nessa implementação. É possível, com base nesse projeto, criar Roles no sistema?

Artigo da Microsoft referente as Roles: https://learn.microsoft.com/pt-br/aspnet/core/security/authorization/roles?view=aspnetcore-8.0

1 resposta
solução!

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.