public async Task<ActionResult> New(Ticket ticket, Guid tempId) { if (ticket.IsHtml) { ticket.Details = ticket.Details.StripHtmlWhenEmpty(); if (string.IsNullOrEmpty(ticket.Details)) { ModelState.AddModelError("Details", "This field is required."); } } if (ModelState.IsValid) { try { if (await CreateTicketAsync(ticket, tempId)) { return RedirectToAction("Index", new { id = ticket.TicketId }); } } // ReSharper disable once EmptyGeneralCatchClause catch (DbEntityValidationException) { //TODO: catch rule exceptions? or can annotations handle this fully now? } } ViewBag.TempId = tempId; await SetProjectInfoForModel(ticket); return View(ticket); }
public async Task<ActionResult> New() { var model = new Ticket { Owner = Context.SecurityProvider.CurrentUserId, IsHtml = Context.TicketDeskSettings.ClientSettings.GetDefaultTextEditorType() == "summernote" }; await SetProjectInfoForModel(model); ViewBag.TempId = Guid.NewGuid(); return View(model); }
public TicketActivity GetValidTicketActivities(Ticket ticket) { if (!(IsTdAdministrator || IsTdHelpDeskUser || IsTdInternalUser)) { throw new SecurityException("User is not authorized to read ticket data."); } var validTicketActivities = ticket.GetAvailableActivites(CurrentUserId); var allowedActivities = IsTdAdministrator ? GetAdministratorUserPermissions() : IsTdHelpDeskUser ? GetHelpDeskUserPermissions() : GetInternalUserPermissions(); return (validTicketActivities & allowedActivities); }
public bool IsTicketActivityValid(Ticket ticket, TicketActivity activity) { return GetValidTicketActivities(ticket).HasFlag(activity); }
private async Task<bool> CreateTicketAsync(Ticket ticket, Guid tempId) { Context.Tickets.Add(ticket); await Context.SaveChangesAsync(); ticket.CommitPendingAttachments(tempId); return ticket.TicketId != default(int); }
private async Task SetProjectInfoForModel(Ticket ticket) { if (ticket.ProjectId == default(int)) { var projects = await Context.Projects.ToListAsync(); var isMulti = (projects.Count > 1); ViewBag.IsMultiProject = isMulti; //set to first project if only one project exists, otherwise use user's selected project ticket.ProjectId = (isMulti) ? await Context.UserSettingsManager.GetUserSelectedProjectIdAsync(Context) : projects.First().ProjectId; } }
private async Task SetProjectInfoForModel(Ticket ticket) { var projects = await Context.Projects.ToListAsync(); var isMulti = (projects.Count > 1); ViewBag.IsMultiProject = isMulti; }
/// <summary> /// Gets the valid ticket activities. /// </summary> /// <remarks> /// This is a convienience method to provide a more natual api for the client. /// It just calls the equivalent method from the security provider. /// </remarks> /// <param name="ticket">The ticket.</param> /// <returns>TicketActivity.</returns> public TicketActivity GetValidTicketActivities(Ticket ticket) { return SecurityProvider.GetValidTicketActivities(ticket); }
/// <summary> /// Determines whether the ticket activity is valid for the specified ticket. /// </summary> /// <remarks> /// This is a convienience method to provide a more natual api for the client. /// It just calls the equivalent method from the security provider. /// </remarks> /// <param name="ticket">The ticket.</param> /// <param name="activity">The activity.</param> /// <returns><c>true</c> if the ticket activity valid for the specified ticket; otherwise, <c>false</c>.</returns> public bool IsTicketActivityValid(Ticket ticket, TicketActivity activity) { return SecurityProvider.IsTicketActivityValid(ticket, activity); }
private bool CheckSecurity(Ticket ticket, TicketActivity activity) { if (!IsTicketActivityValid(ticket, activity)) { throw new SecurityException("User is not authorized to perform this activity."); } return true; }