public ActionResult Create() { CheckCookies(); Ticket model = new Ticket(); model.DueDate = DateTimeOffset.UtcNow.AddDays(10); model.HoursToComplete = 1; UserRolesHelper helper = new UserRolesHelper(); var id = User.Identity.GetUserId(); var roles = helper.ListUserRoles(id); var highest = helper.GetHighestRole(id); ViewBag.HighestUserRole = highest; // Do this in every GET action... var uModel = ProjectsHelper.LoadUserModel(); ViewBag.UserModel = uModel; // If user is Submitter only (or has no role), don't allow Skill, Due Date, or HoursToComplete to show ViewBag.BaseOptionsOnly = (roles == null || ((roles.Count == 1) && (roles[0] == R.Submitter))) ? true : false; // If Admin, allow to select Developer when creating the ticket if (uModel.IsAdmin || uModel.IsPM) { var roleDev = db.Roles.FirstOrDefault(r => r.Name == R.Developer); ViewBag.CanAssignDeveloper = true; if (roleDev != null) { ViewBag.AssignedToDevId = new SelectList(db.Users .Where(d => d.Roles.FirstOrDefault(r => r.RoleId == roleDev.Id) != null), "Id", "UserName"); } else ViewBag.AssignedToDevId = Enumerable.Empty<SelectListItem>(); } else { ViewBag.AssignedToDevId = Enumerable.Empty<SelectListItem>(); ViewBag.CanAssignDeveloper = false; } ViewBag.OwnerUserId = new SelectList(db.Users, "Id", "FirstName"); ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name"); ViewBag.SkillRequiredId = new SelectList(db.SkillLevels, "Id", "Name"); ViewBag.TicketPriorityId = new SelectList(db.TicketPriorities, "Id", "Name"); ViewBag.TicketStatusId = new SelectList(db.TicketStatuses, "Id", "Name"); ViewBag.TicketTypeId = new SelectList(db.TicketTypes, "Id", "Name"); return View(model); }
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, change to shouldLockout: true var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); // // IMPORTANT NOTE: The first parameter above (model.Email) is really the UserName... the PasswordSignInAsync function // expects the UserName here, and NOT the email. So don't try to match up the email in the code below or it will fail! switch (result) { case SignInStatus.Success: // If user has multiple roles, ask which one should become the active one ApplicationDbContext db = new ApplicationDbContext(); var user = db.Users.FirstOrDefault(u => u.UserName == model.Email); // See IMPORTANT NOTE above! (this is really UserName) UserRolesHelper helper = new UserRolesHelper(); var userRoles = helper.ListUserRoles(user.Id); string role = ""; switch (userRoles.Count()) { case 0: user.ActiveRole = R.NewUser; break; case 1: user.ActiveRole = userRoles[0]; break; default: // More than one role, so show modal to allow user to select the login role // But first, set the highest role as the active one... user.ActiveRole = helper.GetHighestRole(user.Id); db.Entry(user).State = EntityState.Modified; db.SaveChanges(); // Now send the roles (concatenated)... for (int i = 0; i < userRoles.Count; i++) role += "-" + userRoles[i]; return RedirectToAction("Index", "Home", new { myRoles = role }); } // For just one role, finish up here db.Entry(user).State = EntityState.Modified; db.SaveChanges(); if (returnUrl == null) return RedirectToAction("Dashboard", "Home"); return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); case SignInStatus.Failure: default: ModelState.AddModelError("", "Invalid login attempt."); return View(model); } }