2015-02-02 15 views
15

Jestem całkiem nowy dla asp.net mvc i patrzyłem na wiele różnych sposobów dodawania ról użytkownika dla mojej strony asp mvc. Chcę korzystać z bazy danych użytkowników, które są automatycznie tworzone dla ciebie, gdy tworzysz nowy projekt mvc. które zawierają tabele:Jak dodać proste role użytkownika - Asp.net MVC C#

  • AspNetRoles
  • AspNetUserClaims
  • AspNetUserLogins
  • AspNetUserRoles
  • AspNetUsers

Szukałem na kilka tutoriali i to trochę mindfield dla początkujących myślę.

wszystkim chcę być w stanie zrobić coś tak jak to

[Authorize(Roles = "admin")] 
public ActionResult Index() 
{ 
    Return View(); 
} 

więc użytkownicy z rolą administratora mogą uzyskać dostęp do strony indeksu. Wszystkie pomoc została doceniona.

+0

chcesz dodać role za pomocą interfejsu? A może chciałbyś użyć prostego skryptu SQL, aby to zrobić i przypisać te role podczas rejestrowania użytkowników? – DSR

+0

Mnóstwo dokumentacji na temat ról dostępnych w google. Jest w tym trochę więcej, niż uwzględniłeś. Czemu nie spróbować jednego z tych przewodników i daj nam znać, jeśli utkniesz, zamiast prosić nas o zrobienie tego za Ciebie. Głównym celem mojego wpisu jest jednak wprowadzenie alternatywy: http://visualstudiomagazine.com/articles/2013/08/01/leveraging-claims-based-security-in-aspnet-45.aspx – RandomUs1r

+0

@DSR Id użytkownicy z rolą administratora w celu dodania ról do innych użytkowników przy użyciu ui – Rob

Odpowiedz

27

Pierwszym krokiem jest utworzenie roli admin. Jest to dość łatwe:

context.Roles.Add(new IdentityRole { Name = "admin" }); 
context.SaveChanges(); 

Aby dodać rolę do istniejącego użytkownika:

var role = context.Roles.SingleOrDefault(m => m.Name == "admin"); 
user.Roles.Add(new IdentityUserRole { RoleId = role.Id }); 

Oba te kroki mogą i powinny być traktowane w swojej metodzie Migrations\Configuration.csSeed, wraz z utworzeniem jakichkolwiek początkowych użytkowników to powinno być administratorami.

Aby administratorzy mogli dodawać role innym użytkownikom, pierwszy krok jest już objęty: ochrona akcji za pomocą [Authorize(Roles = "admin")].

Następnie potrzebny będzie model widoku do pracy z użytkownikiem. Coś jak następuje:

public class UserViewModel 
{ 
    // user properties you'd like to edit here 

    public List<int> SelectedRoleIds { get; set; } 

    public IEnumerable<SelectListItem> RoleChoices { get; set; } 
} 

Musisz mapować ApplicationUser do/z tego widoku modelu.Następnie trzeba ręcznie wypełnić dwie właściwości rolę w UserViewModel:

RoleChoices powinien być przeliczalny wszystkich dostępnych ról:

model.RoleChoices = context.Roles.Select(m => new SelectListItem 
{ 
    Value = m.Id, 
    Text = m.Name 
}); 

SelectedRoleIds powinna być lista identyfikatorów ID wszystkich ról przypisanych aktualnie dla użytkownika:

model.SelectedRoleIds = user.Roles.Select(m => m.RoleId); 

w widoku, a następnie będziesz budować swoją wielokrotny:

@Html.ListBoxFor(m => m.SelectedRoleIds, Model.RoleChoices) 

Podczas tworzenia nowego użytkownika, można po prostu ustawić role przez użytkownika bezpośrednio na stanowisko:

user.Roles = model.SelectedRoleIds.Select(m => new IdentityUserRole { RoleId = m }); 

Podczas edycji istniejącego użytkownika, większa troska musi być podjęta, ponieważ dostaniesz błędów integralności jeśli zapisz ten sam identyfikator roli dwa razy dla tego samego użytkownika. Po pierwsze, trzeba usunąć wszystkie role, które zostały niezaznaczone:

user.Roles.Where(m => !model.SelectedRoleIds.Contains(m.RoleId)) 
    .ToList().ForEach(role => user.Roles.Remove(role)); 

Następnie trzeba dodać jakieś nowo wybrane role:

var existingUserRoles = user.Roles.Select(m => m.RoleId); 
model.SelectedRoleIds.Except(existingUserRoles) 
    .ToList().ForEach(roleId => user.Roles.Add(new IdentityUserRole 
    { 
     RoleId = roleId 
    })); 
+0

Dziękuję bardzo za poświęcenie czasu na to, będę spróbuj teraz: D – Rob

Powiązane problemy