public ActionResult AssociateRole(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var user            = db.Users.Find(id);
            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).ToList();

            if (associatedRoles.Count == allRoles.Count)
            {
                return(this.RedirectToAction("Index", "Users"));
            }

            var model = new AssociateRoleBindingModel()
            {
                AssociatedRoles = associatedRoles,
                Id       = user.Id,
                Username = user.UserName
            };

            return(this.View(model));
        }
        public async Task <ActionResult> AssociateRole([Bind(Include = "Id, AddedRole, Username")] AssociateRoleBindingModel 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.AddedRole))
                {
                    this.ModelState.AddModelError("role", "There are no more roles to be added");
                    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 = userManager.AddToRole(user.Id, bind.AddedRole);
                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 assigned the given 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("AssociateRole", "Users"));
            }

            return(this.View());
        }