2013-08-20 8 views
11

Quindi questa può sembrare una domanda stupida, ma come faccio a mostrare un collegamento solo per un utente amministratore?Nascondere i collegamenti da determinati ruoli in ASP.NET MVC5

Supponiamo che un utente ordinario vede i seguenti link:
Home/Chi/Contatto

E un utente amministratore vede i seguenti link:
Home/Chi/Contatto/Admin

ho provato limitando in il controller e il collegamento del controller nel menu. Ma mostra ancora il collegamento per tutti, non consente l'accesso a nessuno tranne l'amministratore

Le viste possono essere sovraccaricate?

+0

Non è solo nascondere, è necessario valutare il ruolo di utente connesso ... c'è così tanti risposta a questo tipo di domanda –

risposta

30

A seconda del tipo di provider di appartenenze/utenti che si sta utilizzando, si dovrebbe essere in grado di controllare direttamente dalla vista se l'utente è connesso e nel ruolo specifico.

Così si finirebbe con qualcosa di simile;

@Html.ActionLink("Index", "Home") 
@Html.ActionLink("About", "Home") 
@Html.ActionLink("Contact", "Home") 
@if (User.Identity.IsAuthenticated){ 
    if (User.IsInRole("Admin")){ 
     @Html.ActionLink("Admin", "AdminController")   
    } 
} 

E ricorda di aggiungere l'attributo [Authorize] al tuo metodo di Admin azione:

[Authorize(Roles="Admin")] 
public ActionResult Admin() 
{ 
    // ... 
    return View(); 
} 
+1

È una buona pratica (o forse a causa della chiarezza) per verificare se l'utente è autenticato ** e ** se si trova in un determinato ruolo? Come immagino, non avranno alcun ruolo a meno che non comunichino al sito chi sono, il che implica un'autenticazione preventiva. Si prega di notare che non sto ** interrogando ** la scelta ma ** semplicemente chiedendo **. Le mie capacità di sicurezza sono come i pinguini in fuga - visto che gli altri lo fanno, mai fatti da me. (Differenza essendo, sto usando le vacanze per cambiare ambiziosamente quello stato, a differenza dei pigri pinguini, hihi.) –

+0

L'attributo 'Autorizza' controllerà che l'utente sia autenticato per impostazione predefinita e quindi è possibile aggiungere facoltativamente i ruoli. –

+1

Oh, mi rendo conto che non era chiaro (a quanto pare, la lettura mentale non è il tuo lato forte, hehe). Mi riferisco alle righe 4 e 5 del ** primo ** campione (file CSHTML, markup Razor). –

Problemi correlati