public static bool CanManageTopic(this IPrincipal user, ExampleUser author) { if (!HttpContext.Current.Request.IsAuthenticated) return false; if (author != null && author.Id == ExampleContext.Current.User.Id) { return true; } return user.IsInRole(UserRoles.Administrator) || user.IsInRole(UserRoles.Moderator); }
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl) { if (User.Identity.IsAuthenticated) { return RedirectToAction("Index", "Manage"); } if (ModelState.IsValid) { // Get the information about the user from the external login provider var info = await AuthenticationManager.GetExternalLoginInfoAsync(); if (info == null) { return View("ExternalLoginFailure"); } var user = new ExampleUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user); if (result.Succeeded) { result = await UserManager.AddLoginAsync(user.Id, info.Login); if (result.Succeeded) { // Add "User" role after success registeration var currentUser = UserManager.FindByName(user.UserName); await UserManager.AddToRoleAsync(currentUser.Id, UserRoles.User); await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); return RedirectToLocal(returnUrl); } } AddErrors(result); } ViewBag.ReturnUrl = returnUrl; return View(model); }
public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ExampleUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { // Add "User" role after success registeration var currentUser = UserManager.FindByName(user.UserName); await UserManager.AddToRoleAsync(currentUser.Id, UserRoles.User); await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return RedirectToAction("Index", "Forum"); } AddErrors(result); } // If we got this far, something failed, redisplay form return View(model); }
public void SeedUsersAndRoles() { #region Roles var anonymousRole = new IdentityRole(UserRoles.Anonymous); var userRole = new IdentityRole(UserRoles.User); var moderatorRole = new IdentityRole(UserRoles.Moderator); var administratorRole = new IdentityRole(UserRoles.Administrator); _dbContext.Roles.AddOrUpdate(anonymousRole); _dbContext.Roles.AddOrUpdate(userRole); _dbContext.Roles.AddOrUpdate(moderatorRole); _dbContext.Roles.AddOrUpdate(administratorRole); _dbContext.SaveChanges(); #endregion #region Users var hasher = new PasswordHasher(); var administrator = new ExampleUser { Id = "Administrator", FullName = "Administrator", UserName = "******", Email = "*****@*****.**", PasswordHash = hasher.HashPassword("Password!1"), LockoutEnabled = false, AccessFailedCount = 0, SecurityStamp = Guid.NewGuid().ToString() }; _dbContext.Users.AddOrUpdate(administrator); var moderator = new ExampleUser { Id = "Moderator", FullName = "Moderator", UserName = "******", Email = "*****@*****.**", PasswordHash = hasher.HashPassword("Password!1"), LockoutEnabled = false, AccessFailedCount = 0, SecurityStamp = Guid.NewGuid().ToString() }; _dbContext.Users.AddOrUpdate(moderator); var user1 = new ExampleUser { Id = "User1", FullName = "User One", UserName = "******", Email = "*****@*****.**", PasswordHash = hasher.HashPassword("Password!1"), LockoutEnabled = false, AccessFailedCount = 0, SecurityStamp = Guid.NewGuid().ToString() }; _dbContext.Users.AddOrUpdate(user1); var user2 = new ExampleUser { Id = "User2", FullName = "User Two", UserName = "******", Email = "*****@*****.**", PasswordHash = hasher.HashPassword("Password!1"), LockoutEnabled = false, AccessFailedCount = 0, SecurityStamp = Guid.NewGuid().ToString() }; _dbContext.Users.AddOrUpdate(user2); var user3 = new ExampleUser { Id = "User3", FullName = "User Three", UserName = "******", Email = "*****@*****.**", PasswordHash = hasher.HashPassword("Password!1"), LockoutEnabled = false, AccessFailedCount = 0, SecurityStamp = Guid.NewGuid().ToString() }; _dbContext.Users.AddOrUpdate(user3); SaveChanges(); #endregion _dbContext.UserRoles.AddOrUpdate(new IdentityUserRole {RoleId = administratorRole.Id, UserId = administrator.Id}); _dbContext.UserRoles.AddOrUpdate(new IdentityUserRole {RoleId = moderatorRole.Id, UserId = moderator.Id}); _dbContext.UserRoles.AddOrUpdate(new IdentityUserRole {RoleId = userRole.Id, UserId = user1.Id}); _dbContext.UserRoles.AddOrUpdate(new IdentityUserRole {RoleId = userRole.Id, UserId = user2.Id}); _dbContext.UserRoles.AddOrUpdate(new IdentityUserRole {RoleId = userRole.Id, UserId = user3.Id}); SaveChanges(); }