2013-10-23 22 views
5

Yeni VS2013 IDE'de yeni bir MVC uygulaması oluşturdum.Yeni VS 2013 Kimlik UserManager'ına dinamik olarak Rol Ekleme

user = UserManager.FindByName("administrator"); 
var roleresult = UserManager.AddToRole(user.Id,"admin"); 
: Bu harika çalışıyor

var admin = new ApplicationUser() { UserName = "administrator" }; 
var result = UserManager.Create(admin, "administrator"); 

, o zaman yeni bir varsayılan rolüne bu varsayılan kullanıcı koymak istedim: Dinamik bir varsayılan kullanıcı oluşturmak istedim ben AccountController üzerinde Girişi Eylem için aşağıdaki eklendi

İkinci satır hataları, henüz mevcut olmadığı için "admin" rolünü bulamadığı için açıktır, ancak bunu yapmak için UserManager'da uygun bir yöntem bulamıyorum. Rolleri dinamik olarak ekleme yöntemini nerede bulabilirim?

cevap

15

İşte nasıl yaptım. Preauthorized {userName, role} anahtar - değer çiftleri olan bir Dictionary userRoles'im var:

private void setRoles() 
{ 
    using(var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()))) 
    using(var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) 
     foreach (var item in userRoles) 
     { 
      if (!rm.RoleExists(item.Value)) 
      { 
       var roleResult = rm.Create(new IdentityRole(item.Value)); 
       if (!roleResult.Succeeded) 
        throw new ApplicationException("Creating role " + item.Value + "failed with error(s): " + roleResult.Errors); 
      } 
      var user = um.FindByName(item.Key); 
      if (!um.IsInRole(user.Id, item.Value)) 
      { 
       var userResult = um.AddToRole(user.Id, item.Value); 
       if (!userResult.Succeeded) 
        throw new ApplicationException("Adding user '" + item.Key + "' to '" + item.Value + "' role failed with error(s): " + userResult.Errors); 
      } 
     } 
} 
+0

Mükemmel Teşekkür ederim. İhtiyacım olan RoleManager'dı. Denetleyicilerin Rolleri şimdi farklı mı tanımlanıyor? – user1166905

+0

Rica ederim, kullanıcı1166905. Bir rol oluşturmak oldukça basittir, "var roleResult = rm.Create (new IdentityRole (item.Value)); – Ungaro

+0

Teşekkürler Denetleyicilerinde onları tanımlamak istedim, yani [Yetkilendir (Roller = "admin")] ama zaten test edildi ve aynı. – user1166905