2014-09-09 14 views
5

W MVC4 użyłem Roles.IsUserInRole, aby sprawdzić, czy dany użytkownik ma jakąś rolę. Jednak z MVC5 nie mogę tego dłużej robić ...MVC 5 - Role - IsUserInRole i dodawanie użytkownika do roli

Najpierw poprosił mnie o włączenie RoleManagera na web.config, ale potem odkryłem, że Microsoft został przeniesiony z Web.Security do Microsoft.AspNet.Identity .

Moje pytanie brzmi teraz, z Microsoft.AspNet.Identity jak zrobić akcję podobną do Roles.IsUserInRole? I/lub utworzyć relację między rolą a użytkownikiem.

Nawiasem mówiąc, nadal próbuję zrozumieć nowe metody uwierzytelniania (ClaimsIdentity?).

Odpowiedz

10

Powinieneś przeczytać http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx, aby poznać podstawy Identity 2.0!

Jest też kompletny projekt demo, aby zacząć: https://github.com/TypecastException/AspNet-Identity-2-With-Integer-Keys

Jeśli wziąć to jako podstawę swojej tożsamości fundamencie będziesz skończyć z czymś takim:

var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
const string name = "YourUsername" 
const string roleName = "Admin"; 

var user = userManager.FindByName(name); 
//check for user roles 
var rolesForUser = userManager.GetRoles(user.Id); 
//if user is not in role, add him to it 
if (!rolesForUser.Contains(role.Name)) 
{ 
    userManager.AddToRole(user.Id, role.Name); 
} 
+0

OK, zadziałało ... dzięki. Nawiasem mówiąc, atrybut autoryzacji nie działa ... żadna ideia? Nie mogę przeczytać tego artykułu, ale przeczytam go od góry do dołu jak najszybciej. –

+1

Proponuję zadać inne pytanie z odpowiednim opisem tego problemu, ponieważ wszystko, co chciałbym tu zrobić, to zgadywanie. – Marco

+0

ok dzięki utworzony post http://stackoverflow.com/questions/25743113/mvc-5-roles-authorizeattribute-outdated –

6

The post był naprawdę pomocny (dziękuję Serv, zagłosowałby, gdyby moja reputacja pozwoliła mi). Pomógł mi rozwiązać problem, który miałem z kilkoma niewielkimi zmianami, aby pasowały do ​​tego, co próbowałem osiągnąć. Mój szczególny problem polegał na tym, że chciałem sprawdzić w widoku MVC, czy bieżący użytkownik był w danej grupie ról. Odkryłem także, że Roles.IsUserInRole już nie działa.

Jeśli robisz to na widoku, ale przy użyciu tożsamości ASP.NET 2.0 zamiast prostego dostawcę członkostwa oferowanych przez poprzednie wersje MVC, następujące mogą być pomocne w postaci roztworu 1-LINE:

bool isAdmin = HttpContext.Current.User.IsInRole("Admin"); 

następnie można połączyć je z HTML selektywnie pokazują pozycje menu (co jest co używam go) z mniej więcej tak:

@if (isAdmin) 
{ 
    <li>@Html.ActionLink("Users", "List", "Account")</li> 
} 

pozwala to mnie do uniemożliwienia dostępu do hiperłączy zarządzania użytkownikami, gdzie użytkownik nie jest członkiem roli "Administrator".

+0

Nice (1up), to pomogło mi też! –

Powiązane problemy