2014-09-09 12 views
5

In MVC4 ho utilizzato Roles.IsUserInRole per verificare se un determinato utente ha un ruolo. Tuttavia, con MVC5 non riesco più a farlo ...MVC 5 - Ruoli - IsUserInRole e aggiunta di utenti al ruolo

Inizialmente, mi ha chiesto di abilitare RoleManager sul web.config, ma poi ho scoperto che microsoft si è spostato da Web.Security a Microsoft.AspNet.Identity .

La mia domanda ora è, con Microsoft.AspNet.Identity come faccio un'azione simile a Roles.IsUserInRole? E/o creare una relazione tra il ruolo e l'utente.

A proposito, sto ancora cercando di capire i nuovi metodi di autenticazione (ClaimsIdentity?).

risposta

10

Si consiglia di leggere http://typecastexception.com/post/2014/04/20/ASPNET-MVC-and-Identity-20-Understanding-the-Basics.aspx per le basi di Identity 2.0!

C'è anche un progetto dimostrativo completo per iniziare: https://github.com/TypecastException/AspNet-Identity-2-With-Integer-Keys

Se si prende questo come base per la vostra fondazione identità si ritroverete con qualcosa di simile:

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, ha funzionato ... grazie. A proposito, l'attributo authorize non funziona ... nessuna ideia? Non riesco a leggere l'articolo in questo momento, ma lo leggerò da cima a fondo al più presto. –

+1

Ti suggerisco di fare un'altra domanda con una descrizione adeguata di questo problema, perché tutto ciò che farei qui è indovinare. – Marco

+0

ok grazie ho creato il post http://stackoverflow.com/questions/25743113/mvc-5-roles-authorizeattribute-outdated –

6

Il post sopra è stato davvero utile (Grazie Serv, voterei se la mia reputazione mi ha permesso di farlo). Mi ha aiutato a risolvere un problema che stavo facendo con alcune modifiche minori per adattarsi a ciò che stavo cercando di ottenere. Il mio problema particolare era che volevo controllare una vista MVC se l'utente corrente si trovava in un determinato gruppo di ruoli. Ho anche scoperto che Roles.IsUserInRole non funzionava più.

Se si sta facendo questo in una vista, ma utilizzando ASP.NET 2.0 identità al posto del semplice provider di appartenenze offerto dalle versioni precedenti MVC, il seguente potrebbe essere utile come soluzione 1-line:

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

si può quindi combinarlo con HTML per mostrare in modo selettivo le voci di menu (che è quello che ho usato per) con qualcosa di simile:

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

questo mi permette di impedire l'accesso ai collegamenti ipertestuali di gestione degli utenti in cui il l'utente non è un membro del ruolo "Amministratore".

+0

Nice (1 su), anche questo mi ha aiutato! –