2013-08-07 8 views
5

Attualmente sto utilizzando MVC 4 con Razor Engine e C# come codice dietro la logica. Una versione personalizzata del database SimpleMembership è stata creata per soddisfare i requisiti del sito Web.Assegnazione programmata di ruoli all'utente in MVC 4 tramite caselle di controllo

Il sito Web può creare e modificare ruoli e utenti come previsto, tuttavia sto riscontrando un problema nell'assegnare un ruolo a un utente. Alcuni risultati di ricerca forniscono un codice per assegnare un ruolo particolare a un utente durante la creazione dell'account. I nostri requisiti non sono quello di avere questo, ma abbiamo bisogno di assegnarli manualmente utilizzando un'interfaccia utente tramite il sito web.

Ci sono un sacco di tutorial per ASP.Net (esempio qui sotto), però mi sto trovando difficile individuare un tutorial rilevante per MVC 4.

http://www.asp.net/web-forms/tutorials/security/roles/assigning-roles-to-users-cs

Dopo aver letto quanto sopra, chiedo le seguenti domande.

Domanda uno: Esiste un tutorial MVC per l'assegnazione di ruoli utente tramite un'interfaccia utente? In tal caso, puoi fornire un link al tutorial.

Domanda Due: Se non si dispone di un collegamento a un tutorial, potrebbe fornire qualche consiglio su quanto segue:

  • Quando un amministratore carica l'utente Utente di Gestione un tavolo caricheremo un elenco di utenti, quando fanno clic sul pulsante di modifica per un particolare utente, il seguente effetto avrà effetto e passerà i dati a una vista chiamata "Edit.cshtml".

    public ActionResult Edit(int id = 0) 
    { 
        var userProfile = _db.UserProfiles.Find(id); 
        if (userProfile == null) 
        { 
        Response.Redirect("~/UserManagement/PageNotFound"); 
        } 
    
        return View(userProfile); 
    } 
    
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit(UserProfile userProfile) 
    { 
        if (ModelState.IsValid) 
        { 
        _db.Entry(userProfile).State = EntityState.Modified; 
        _db.SaveChanges(); 
        return RedirectToAction("Index"); 
        } 
    
        return View(userProfile); 
    } 
    

All'interno della vista 'Modifica' Stavo pensando di rendere una vista parziale sulla pagina con le caselle di controllo per i vari ruoli all'interno del database. Qualcosa di simile al seguente:

@model IEnumerable<PROJECTNAME.DAL.Models.Role> 

@foreach (var item in Model) 
{ 
    @Html.LabelFor(m => item.RoleName) 

    <label class="bolder"> 
     Visible 
     @Html.CheckBoxFor(m => item.Visible) 
     <span class="lbl"></span> 
    </label> 
} 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
    <!-- CODE HERE IS TO EDIT USER DETAILS --> 

    <div id="assignableroles"> 
     @{ 
     Html.RenderPartial("_AssignableRoles"); 
     } 
    </div> 
    </fieldset>  
} 

Una volta che le pertinenti casella di controllo/es sono state segnate questa dovrebbe aggiornare nel database e dare all'utente l'accesso a quella particolare area (a patto che gli attributi di autorizzazione sono state aggiunte di conseguenza).

Ho trovato questo in linea, tuttavia non sono sicuro di dove aggiungere questo in un controller o se è rilevante per la mia situazione, poiché sto considerando di utilizzare due visualizzazioni in quanto devo gestire due diversi modelli.

var role = (SimpleRoleProvider)Roles.Provider; 

    if (!role.RoleExists(selectedRole)) 
    role.CreateRole(selectedRole); 

    WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
    role.AddUsersToRoles(new[] { model.UserName }, new[] { selectedRole }); 

Ci scusiamo per il lungo post, ma questa è la prima volta che ho usato iscrizione entro MVC e io sono ancora abbastanza nuovo per questo strumento.

Edit:

Ho anche assicurato questo è stato aggiunto al web.file di configurazione:

<roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="SimpleRoleProvider" 
     type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" 
     connectionStringName="DefaultConnection" applicationName="PROJECTNAME" /> 
    </providers> 
</roleManager> 
+0

Ho usato una soluzione, tuttavia è completamente diversa da quella che stai provando. Se hai insistito per il tuo approccio, fammi sapere il tuo punto finale non problematico e quali problemi sono rimasti – AminSaghi

risposta

7

modo più semplice è quello di manipolare con i seguenti metodi:

Roles.AddUserToRole(UserName, RoleName) - aggiungere ruolo

Roles.RemoveUserFromRole(UserName, RoleName) - rimuovere ruolo

Ad esempio, per aggiungere il ruolo per l'utente si possono avere seguente risultato azione nel controller:

[HttpPost] 
public ActionResult(string UserName, string RoleName) 
{ 
Roles.AddUserToRole(UserName, RoleName) 
return View() 
} 

string UserName, stringa Ruolo: deve essere passato dal metodo Visualizza per post.

+0

Grazie per il consiglio. Attualmente sto correggendo un altro problema con le caselle di controllo che vengono renderizzate, quindi tornerò su questo più avanti per confermare se la soluzione ha funzionato. – Damian

Problemi correlati