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); } }
// GET: Tickets/Edit/5 public ActionResult Edit(int? id) { CheckCookies(); // Do this in every GET action... var uModel = ProjectsHelper.LoadUserModel(); ViewBag.UserModel = uModel; if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Ticket ticket = db.Tickets.Find(id); if (ticket == null) { return HttpNotFound(); } UserRolesHelper helper = new UserRolesHelper(); var userId = helper.GetCurrentUserId(); var roles = helper.ListUserRoles(userId); // 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) { var dev = new SelectList(db.Users .Where(d => d.Roles.Any(r => r.RoleId == roleDev.Id)), "Id", "UserName", ticket.AssignedToDevId); ViewBag.AssignedToDevId = dev; } else ViewBag.AssignedToDevId = Enumerable.Empty<SelectListItem>(); } else { ViewBag.AssignedToDevId = Enumerable.Empty<SelectListItem>(); ViewBag.CanAssignDeveloper = false; } ViewBag.OwnerUserId = new SelectList(db.Users, "Id", "FirstName", ticket.OwnerUserId); ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", ticket.ProjectId); ViewBag.SkillRequiredId = new SelectList(db.SkillLevels, "Id", "Name", ticket.SkillRequiredId); ViewBag.TicketPriorityId = new SelectList(db.TicketPriorities, "Id", "Name", ticket.TicketPriorityId); ViewBag.TicketStatusId = new SelectList(db.TicketStatuses, "Id", "Name", ticket.TicketStatusId); ViewBag.TicketTypeId = new SelectList(db.TicketTypes, "Id", "Name", ticket.TicketTypeId); return View(ticket); }
public ActionResult ManageUsers() { ViewBag.Message = "Manage users."; UserRolesHelper helper = new UserRolesHelper(); // Create list of all roles List<string> roles = db.Roles.Select(r => r.Name).ToList(); // We don't need Guest or NewUser, so remove them roles.Remove(R.Guest); roles.Remove(R.NewUser); int nRoles = roles.Count; // Create list of users List<ManageUsersData> users = db.Users .Where(u => u.UserName != R.GuestUserName) .Select(u => new ManageUsersData() { Id = u.Id, UserName = u.UserName, Email = u.Email, DisplayName = u.DisplayName, First = u.FirstName, Last = u.LastName }) .ToList(); // And for each user, create list of roles and generate foreach (var user in users) { user.OrigRoles = new bool[nRoles]; user.NewRoles = new bool[nRoles]; var userRoles = helper.ListUserRoles(user.Id); for (var i = 0; i < nRoles; i++) user.OrigRoles[i] = user.NewRoles[i] = userRoles.Contains(roles[i]); } // Now for each user, get list of roles and create origRoles data ViewBag.UsersAndRoles = users; ViewBag.Roles = roles; // Do this in every GET action... ViewBag.UserModel = ProjectsHelper.LoadUserModel(); return View(new ManageUsersModel(users, roles)); }