Role w ASP.NET MVC Core

Posted on

role użytkowników

Dzisiaj temat, który powraca dość często w aplikacjach ASP.NET MVC Core czyli role użytkowników.

Tak się zdarza, że chcemy stworzyć sobie użytkownika, zarządzanie ich uprawnieniami oraz możliwość wejścia do danej metody kontrolera lub całej klasy dla danej grupy użytkowników

W tym celu tworzymy role i ograniczamy dostęp do poszczególnych metod

Nie chcę rozpisywać się jak stworzyć możliwość korzystania z gotowych klas zarządzania użytkownikami, można to sobie wyklikać w Visual Studio w czasie tworzenia aplikacji ASP.NET MVC

Stwórzmy dzisiaj prostą rolę Administratora

W tym celu zmodyfikujmy klasę AccountController dodając następujący kod :

var user2 = _db.Users.SingleOrDefault(x => x.Email == "wstaw@email.com");

await _roleManager.CreateAsync(new IdentityRole("Admin"));

var user = await _userManager.FindByIdAsync(user2.Id);
await _userManager.AddToRoleAsync(user, "Admin");

Użytkownika dodaliśmy wcześniej korzystając z gotowych klas i po wpisaniu w przeglądarce Account/Login
w adresie naszej strony, kliknęliśmy register

Teraz odszukujemy naszego użytkownika po adresie email z bazy danych
Następnie tworzymy rolę korzystając z RoleManagera. _roleManager został wstrzyknięty dzięki DI
Tak wygląda nasz kod przy tworzeniu wstrzykiwania w kontrolerze :

private readonly UserManager<ApplicationUser> _userManager;</pre>
private readonly RoleManager<IdentityRole> _roleManager;
private readonly SignInManager<ApplicationUser> _signInManager;
private readonly IEmailSender _emailSender;
private readonly ILogger _logger;
ApplicationDbContext _db;

public AccountController(
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
IEmailSender emailSender,
ILogger<AccountController> logger,
RoleManager<IdentityRole> roleManager,
ApplicationDbContext db)
{
_userManager = userManager;
_signInManager = signInManager;
_emailSender = emailSender;
_logger = logger;
_db = db;
_roleManager = roleManager;
}

Dodaliśmy klasę ApplicationDbContext oraz RoleManager

Z tego co pamiętam, należy odnaleźć użytkownika jeszcze raz poprzez obiekt _userManager by zgadzały się typy obiektów w wywołaniu następnej metody _userManager.AddToRoleAsync()

I już, operacja przebiega bez problemów

Teraz, gdy mamy przypisanego użytkownika do roli Admin, możemy tylko jemu pozwolić na korzystanie z metody kontrolera poprzez właściwość

[Microsoft.AspNetCore.Authorization.Authorize(Roles = "Admin")]

Bardziej zaawansowane zarządzanie użytkownikami wymaga jeszcze trochę pracy, jednak podane metody są wystarczające do rozpoczęcia dalszych eksperymentów

Myślę, że tworząc kolejny projekt będę w stanie przedstawić również zarządzanie rolami – zmianę roli dla danego użytkownika co już robiłem, ale nie zaprezentowałem tego na blogu

Do zobaczenia

 


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *