I created a new MVC application in the new VS2013 IDE. I added the following to the Login Action on the AccountController as I wanted to create a default user dynamically:
var admin = new ApplicationUser() { UserName = "administrator" };
var result = UserManager.Create(admin, "administrator");
This works great, I then wanted to put this default user into a new default role:
user = UserManager.FindByName("administrator");
var roleresult = UserManager.AddToRole(user.Id,"admin");
The second line errors because obviously it can’t find the role “admin” as it doesn’t exist yet, but I can’t find a relevant method on the UserManager to do so. Where can I find the method to add roles dynamically?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Here is how I did it. I have a Dictionary userRoles with preauthorized {userName, role} key – value pairs :
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);
}
}
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0