6

ho 3 modelli [utente, ruolo e UserRole]autorizzazione basata sui ruoli con List Modello

 
Use {ID [PK], Name, Email, Password, .....} 
Role {ID [PK], Name, Description, .......} 
UserRole {UserID [FK], RoleID [FK]} 

prendere in considerazione, l'autorizzazione basata sui ruoli sul controller utilizzando il [Autorizza] attributo che specifica che l'utente deve essere nel ruolo di amministratore per accedere a qualsiasi azione di controllo della classe

[Authorize(Roles = "Administrator")] 
public class PageController : Controller 
{ 
    // Controller code here 
} 

Questo va bene, cosa ho bisogno è,

esiste un modo per assegnare la mia collezione di ruolo a [Authoriz e] attributo? ad esempio

Riceverò i ruoli assegnati da Utente connesso e lo memorizzerò in Elenco. È possibile assegnare questo elenco all'attributo [Autorizza]? qualcosa come segue:

[Authorize(Roles = MyDynamicallyLoadedList)] 
public class PageController : Controller 
{ 
    // Controller code here 
} 
+0

1+, vota, buona domanda .... –

risposta

1

Bene, due problemi.

Innanzitutto, non è possibile utilizzare un parametro come parametro di un attributo. Puoi invece usare una matrice. http://msdn.microsoft.com/fr-fr/library/ms177221%28v=vs.100%29.aspx

In secondo luogo, i valori dei parametri degli attributi devono essere noti al momento della compilazione: il contenuto della lista sarà noto solo in fase di esecuzione.

Otterrete un messaggio del tipo:

Un argomento attributo deve essere un'espressione costante, typeof espressione o la creazione matrice espressione di un tipo di parametro di attributo

soluzione sarebbe quella di creare un nuovo attributo Authorization (ereditato da AuthorizeAttribute) e override AuthorizedCore

Un esempio (che è possibile adattare alle proprie problematiche) può essere trovato here

1

Sì.

  1. Override PostAuthenticateRequest in global.asax
  2. Caricare i ruoli dal DB
  3. Crea una nuova GenericPrincipal
  4. assegnare il principale alla Thread.CurrentPrincipal e HttpContext.Current.User

Esempio:

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     string[] rolelist = GetRoleListForUserFromAPI(User.Identity.Name); 
     HttpContext.Current.User = new GenericPrincipal(User.Identity, rolelist); 
     Thread.CurrentPrincipal = HttpContext.Current.User; 
    } 
} 
+0

Puoi suggerirmi qualche tutorial o blog in modo che possa andare passo dopo passo –

+0

Ho aggiunto un esempio – jgauffin

+0

Amico, Scusa, sono abbastanza nuovo per questo, puoi per favore fornirmi un esempio un po 'più dettagliato? e come questo può essere applicato all'attributo [Autorizza] del controllore? –

Problemi correlati