none
Como puedo verificar el rol de un usuario cuando inicia sesion utilizando Identity RRS feed

  • Pregunta

  • Muy buenos días a todos los miembros del foro, un cordial saludo.
    Me gustaría saber como puedo verificar el rol de un usuario cuando inicia sesión utilizando Identity

    Me Registro perfectamente, inicio sesión pero cuando intento de ingresar a una vista con permisos de "Admin" me dice "Access denied You do not have access to this resource."

    [Authorize(Roles = "Admin")]
    public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";
    
        return View();
    }

    //Startup.cs public void ConfigureServices(IServiceCollection services) { //DataBase Connection services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); // Library Identity services.AddDefaultIdentity<ApplicationUser>().AddRoles<IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>(); // IdentityOptions services.Configure<IdentityOptions>(options => { // Default SignIn settings. options.SignIn.RequireConfirmedEmail = false; options.SignIn.RequireConfirmedPhoneNumber = false; // Password settings. options.Password.RequireDigit = false; options.Password.RequireLowercase = false; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequiredLength = 4; options.Password.RequiredUniqueChars = 0; // Lockout settings. options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); options.Lockout.MaxFailedAccessAttempts = 5; options.Lockout.AllowedForNewUsers = true; // User settings. options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+"; options.User.RequireUniqueEmail = false; // ojo con esto }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); // Use Authentication app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } // Register.cs public async Task<IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (ModelState.IsValid) { var user = new ApplicationUser { UserName = Input.Email, Email = Input.Email }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { var UserRole = "Admin"; // Admin Role var x = await _userManager.AddToRoleAsync(user, UserRole); // Asignacion de rol al usuario registrado _logger.LogInformation("User created a new account with password."); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } // If we got this far, something failed, redisplay form return Page(); }


    // DbContext

    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore;
    
    
    namespace test.Models
    {
        public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
        {
            public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() });
                modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "User", NormalizedName = "User".ToUpper() });
                base.OnModelCreating(modelBuilder);
            }
            public DbSet<Prueba> Pruebas { get; set; }
        }
    }



    • Editado Sophia95 domingo, 14 de julio de 2019 15:13
    domingo, 14 de julio de 2019 15:07

Respuestas

  • Hola, revisa en tu base de datos la tabla [AspNetRoles] o como hayas definido la tabla de roles que Admin exista. Luego verifica la tabla que relaciona Usuarios con Roles que por defecto es [AspNetUserRoles], comprueba que se crea el registro al aplicar AddToRoleAsync


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta LuisFSantiago lunes, 15 de julio de 2019 18:19
    • Marcado como respuesta Sophia95 martes, 16 de julio de 2019 15:39
    lunes, 15 de julio de 2019 13:08
    Moderador

Todas las respuestas

  • Pero que es lo que quieres hacer que el usuario pueda acceder o te diga que tipo de Rol tiene el usuario actual que intenta ingresar ya que tienes dos roles Admin y User se un poco más especificar que quieres lograr 

    saludos

    • Editado Geardarko lunes, 15 de julio de 2019 4:02 edit
    lunes, 15 de julio de 2019 4:01
  • Pero que es lo que quieres hacer que el usuario pueda acceder o te diga que tipo de Rol tiene el usuario actual que intenta ingresar ya que tienes dos roles Admin y User se un poco más especificar que quieres lograr 

    saludos

    Hola!
    ok no me explique muy bien, el problema que tengo es que la librería identity no esta funcionando correctamente o eso es lo que pienso. 
    Lo que quiero logar es: cuando cualquier usuario se registre tenga el rol " Administrador " 

    if (ModelState.IsValid)
    {
    var user = new ApplicationUser { UserName = Input.Email, Email = Input.Email };
    var result = await _userManager.CreateAsync(user, Input.Password);
        if (result.Succeeded)
        {
        var UserRole = "Admin"; // Admin Rol
        var x = await _userManager.AddToRoleAsync(user, UserRole); // Asignacion de rol al usuario registrado
        }
    }
    

    Pero no funciona correctamente, intento ingresar a una vista con rol de administrador, ejemplo:

    [Authorize(Roles = "Admin")]
    public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";
    
        return View();
    }

    Y me muestra la vista Access denied - You do not have access to this resource.
    Osea si estoy registrándome como administrador e ingreso a una vista solo para administradores xq me dice que no tengo acceso.

    lunes, 15 de julio de 2019 12:29
  • Hola, revisa en tu base de datos la tabla [AspNetRoles] o como hayas definido la tabla de roles que Admin exista. Luego verifica la tabla que relaciona Usuarios con Roles que por defecto es [AspNetUserRoles], comprueba que se crea el registro al aplicar AddToRoleAsync


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Propuesto como respuesta LuisFSantiago lunes, 15 de julio de 2019 18:19
    • Marcado como respuesta Sophia95 martes, 16 de julio de 2019 15:39
    lunes, 15 de julio de 2019 13:08
    Moderador