Esempio n. 1
0
        public async Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser
                {
                    UserName     = model.Email,
                    Email        = model.Email,
                    PhoneNumber  = model.PhoneNumber,
                    FirstName    = model.FirstName,
                    LastName     = model.LastName,
                    ViewToPublic = model.ViewToPublic,
                    IsAPilot     = GetRoleNameFromRoleId(model.Role.RoleId) == "Pilot" || model.IsAPilot
                };
                IdentityResult result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var    im       = new IdentityManager();
                    string roleName = _db.Roles.Find(model.Role.RoleId).Name;
                    im.AddUserToRole(user.Id, roleName);
                    if (user.IsAPilot)
                    {
                        var pm = new PilotManager();
                        pm.AddPilot(user);
                    }
                    if (roleName != "Admin")
                    {
                        return(RedirectToAction("Index", "Account"));
                    }
                    List <Plane> planes = _db.Planes.ToList();
                    foreach (Plane plane in planes)
                    {
                        UserManager.AddClaim(user.Id, new Claim("PlaneAccess", plane.TailNumber));
                    }
                    //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", "Account"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Esempio n. 2
0
        public async Task <ActionResult> Edit(EditViewModel idModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(idModel));
            }
            List <IdentityRole> roleUserList = _db.Roles.ToList();

            foreach (IdentityRole userRole in roleUserList)
            {
                List <IdentityUserRole> userRoleList = userRole.Users.ToList();
                foreach (IdentityUserRole u in userRoleList.Where(u => u.UserId == idModel.Id))
                {
                    AddOrRemoveFromRole(u.UserId, u.RoleId);
                }
            }
            AddOrRemoveFromRole(idModel.Id, idModel.RoleId);

            _db.SaveChanges();
            ApplicationUser user = await UserManager.FindByIdAsync(idModel.Id);

            user.UserName     = idModel.Email;
            user.Email        = idModel.Email;
            user.PhoneNumber  = idModel.PhoneNumber;
            user.FirstName    = idModel.FirstName;
            user.LastName     = idModel.LastName;
            user.ViewToPublic = idModel.ViewToPublic;
            user.IsAPilot     = GetRoleNameFromUserId(idModel.Id) == "Pilot" || idModel.IsAPilot;


            IdentityResult result = await UserManager.UpdateAsync(user);

            if (result.Succeeded)
            {
                var pm = new PilotManager();
                if (user.IsAPilot)
                {
                    if (!pm.PilotExists(user))
                    {
                        pm.AddPilot(user);
                    }
                }
                else
                {
                    if (pm.PilotExists(user))
                    {
                        pm.RemovePilot(user);
                    }
                }
                if (GetRoleNameFromRoleId(idModel.RoleId) != "Admin")
                {
                    return(RedirectToAction("Index"));
                }
                List <Plane>  planes = _db.Planes.ToList();
                List <string> claims =
                    user.Claims.Where(c => c.ClaimType == "PlaneAccess").Select(c => c.ClaimValue).ToList();
                foreach (Plane plane in planes)
                {
                    if (!claims.Contains(plane.TailNumber))
                    {
                        UserManager.AddClaim(user.Id, new Claim("PlaneAccess", plane.TailNumber));
                    }
                }
                return(RedirectToAction("Index"));
            }
            MessageBox.Show(result.Errors.FirstOrDefault());
            return(View(idModel));
        }