public ActionResult DissociateRole(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var user = db.Users.Find(id);

            if (user == null)
            {
                return(HttpNotFound());
            }
            var context         = new ESportsEventsContext();
            var roleManager     = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));
            var allRoles        = roleManager.Roles.ToList();
            var associatedRoles = user.Roles.Select(r => allRoles.FirstOrDefault(ar => ar.Id == r.RoleId).Name);

            if (!associatedRoles.Any())
            {
                return(this.RedirectToAction("Index", "Users"));
            }

            var model = new DissociateRoleBindingModel
            {
                AssociatedRoles = associatedRoles,
                Id       = id,
                Username = user.UserName
            };

            return(this.View(model));
        }
        public async Task <ActionResult> DissociateRole([Bind(Include = "Id, RoleToRemove, Username")] DissociateRoleBindingModel bind)
        {
            if (bind.Id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var user = db.Users.Find(bind.Id);

            if (ModelState.IsValid)
            {
                var userManager = HttpContext.GetOwinContext().GetUserManager <ApplicationUserManager>();
                if (string.IsNullOrEmpty(bind.RoleToRemove))
                {
                    this.ModelState.AddModelError("role", "There are no more roles to be removed");
                    var context         = new ESportsEventsContext();
                    var roleManager     = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));
                    var allRoles        = roleManager.Roles.ToList();
                    var AssociatedRoles = user.Roles.Select(r => allRoles.FirstOrDefault(ar => ar.Id == r.RoleId).Name);
                    bind.AssociatedRoles = AssociatedRoles;
                    //bind.Username = user.UserName;
                    return(this.View(bind));
                }
                var result = await userManager.RemoveFromRoleAsync(user.Id, bind.RoleToRemove);

                foreach (var @event in user.AdministratedEvents)
                {
                    @event.EventAdmins.Remove(user);
                }
                this.db.SaveChanges();
                if (User.Identity.GetUserId() == user.Id)
                {
                    await this.SignInAsync(user, true);
                }
                //userManager.Update(user);
                if (result == IdentityResult.Failed())
                {
                    this.ModelState.AddModelError("role", "This user can not be dissociated this role");
                    var context         = new ESportsEventsContext();
                    var roleManager     = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));
                    var allRoles        = roleManager.Roles.ToList();
                    var AssociatedRoles = user.Roles.Select(r => allRoles.FirstOrDefault(ar => ar.Id == r.RoleId).Name);
                    bind.AssociatedRoles = AssociatedRoles;
                    //bind.Username = user.UserName;
                    return(this.View(bind));
                }

                return(this.RedirectToAction("DissociateRole", "Users"));
            }

            return(this.View());
        }