Exemple #1
0
        public User FindUserById(string id)
        {
            var user = _userManager.FindById(id);

            if (user != null && user.AllRoles.Count == 0)
            {
                var roles = _userManager.GetRoles(user.Id);
                user.AllRoles = _roleManager.Roles.Where(r => roles.Contains(r.Name)).ToList();
            }
            return(user);
        }
        public ActionResult AssignTicket(int?ticketId, string userId, bool add)
        {
            if (!ticketId.HasValue || string.IsNullOrEmpty(userId) || !ModelState.IsValid)
            {
                return(RedirectToAction(nameof(TicketsController.AllTickets)));
            }
            else
            {
                Ticket ticket = DbContext.Tickets
                                .FirstOrDefault(p => p.Id == ticketId && !p.Project.Archived);

                ApplicationUser user = DbContext.Users
                                       .FirstOrDefault(p => p.Id == userId);

                if (add)
                {
                    History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Assignee", ticket.AssignedTo == null ? "None" : ticket.AssignedTo.Email, user.Email);
                    NotificationService.Create(ticket, $"Ticket assigned to ${user.Email}");
                    DbContext.Histories.Add(history);
                    ticket.AssignedTo = user;
                    NotificationService.Create(ticket, $"This Ticket is assigned to you ->> ${ticket.AssignedTo.Email}");
                }
                else
                {
                    ticket.AssignedTo = null;
                }

                DbContext.SaveChanges();

                return(RedirectToAction(nameof(UsersController.AllUsersForTickets), "Users"));
            }
        }
Exemple #3
0
        public User GetUser(DefaultUserManager userManager = null)
        {
            if (userManager == null)
            {
                userManager = HostConstObject.Container.Resolve <DefaultUserManager>();
            }
            var user = userManager.FindById(Id);

            if (user == null)
            {
                user = new User
                {
                    UserType       = UserType,
                    UserName       = UserName,
                    Email          = Email,
                    PhoneNumber    = PhoneNumber,
                    LockoutEnabled = false,
                    DynamicToken   = DynamicToken,
                    MobileDevice   = MobileDevice
                };
            }
            else
            {
                user.UserType     = UserType;
                user.UserName     = UserName;
                user.Email        = Email;
                user.PhoneNumber  = PhoneNumber;
                user.DynamicToken = DynamicToken;
                user.MobileDevice = MobileDevice;
            }
            return(user);
        }
        public ActionResult DeleteTicket(int?ticketId)
        {
            if (!ticketId.HasValue)
            {
                return(RedirectToAction(nameof(TicketsController.AllTickets)));
            }
            else
            {
                string userId = User.Identity.GetUserId();

                ApplicationUser user = DefaultUserManager.FindById(userId);

                Ticket ticket = DbContext.Tickets
                                .FirstOrDefault(p => p.Id == ticketId && !p.Project.Archived);

                if (User.IsInRole(Admin) || User.IsInRole(ProjectManager))
                {
                    DbContext.Tickets.Remove(ticket);

                    DbContext.SaveChanges();

                    return(RedirectToAction(nameof(TicketsController.AllTickets)));
                }
                else if (User.IsInRole(Submitter))
                {
                    if (ticket.CreatedBy == user)
                    {
                        DbContext.Tickets.Remove(ticket);

                        DbContext.SaveChanges();

                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                    else
                    {
                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                }
                else if (User.IsInRole(Developer))
                {
                    if (ticket.AssignedTo == user)
                    {
                        DbContext.Tickets.Remove(ticket);

                        DbContext.SaveChanges();

                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                    else
                    {
                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                }
                else
                {
                    return(RedirectToAction(nameof(TicketsController.AllTickets)));
                }
            }
        }
Exemple #5
0
        public ApiResult LoginWithOAuth([FromBody] OAuthLoginModel oauthLoginModel)
        {
            var result = new ApiResult();
            var oauth  = _currencyService.GetSingleByConditon <UserOAuth>(
                o => o.OAuthType == oauthLoginModel.OAuthType && o.OAuthId == oauthLoginModel.OAuthId);

            if (oauth == null)
            {
                result.SetData(null);
            }
            else
            {
                var user = _userManager.FindById(oauth.MemberId);
                result = Login(oauthLoginModel.MobileDevice, user);
            }
            return(result);
        }
        public ActionResult CreateTicket(TicketViewModel model)
        {
            string userId = User.Identity.GetUserId();

            if (string.IsNullOrEmpty(userId))
            {
                return(View(model));
            }
            else
            {
                if (!ModelState.IsValid)
                {
                    List <Project> projects = DbContext.Projects
                                              .Where(p => p.Users.Any(q => q.Id == userId) && !p.Archived)
                                              .Select(p => p)
                                              .ToList();

                    SelectList projectList = new SelectList(projects, "Id", "Name");

                    ViewData["projects"] = projectList;

                    SelectList typeList = new SelectList(DbContext.TicketTypes, "Id", "Name");

                    ViewData["types"] = typeList;

                    SelectList priorityList = new SelectList(DbContext.TicketPriorities, "Id", "Name");

                    ViewData["priorities"] = priorityList;

                    return(View(model));
                }

                int projectId  = model.ProjectId;
                int priorityId = Convert.ToInt32(model.PriorityId);
                int typeId     = model.TypeId;

                Ticket ticket = new Ticket()
                {
                    Title       = model.Title,
                    Description = model.Description,
                    Project     = DbContext.Projects.Where(p => p.Id == projectId && !p.Archived).FirstOrDefault(),
                    Priority    = DbContext.TicketPriorities.Where(p => p.Id == priorityId).FirstOrDefault(),
                    Type        = DbContext.TicketTypes.Where(p => p.Id == typeId).FirstOrDefault(),
                    Status      = DbContext.TicketStatuses.Where(p => p.Name == "Open").FirstOrDefault(),
                    CreatedBy   = DefaultUserManager.FindById(User.Identity.GetUserId())
                };

                DbContext.Tickets.Add(ticket);

                DbContext.SaveChanges();

                return(RedirectToAction(nameof(TicketsController.MyTickets)));
            }
        }
Exemple #7
0
        public IdentityResult SetLockoutEnabled(string userId, bool enabled)
        {
            var result = _userManager.SetLockoutEnabled(userId, enabled);

            if (result.Succeeded)
            {
                var user = _userManager.FindById(userId);
                if (!enabled)
                {
                    //修改令牌,屏蔽app访问
                    user.DynamicToken = KeyGenerator.GetGuidKey().ToString();
                    _userManager.Update(user);
                }
                Logger.Operation($"{(enabled ? "启用" : "禁用")}会员-{user.UserName}:{user.Id}", MemberBaseModule.Instance, SecurityLevel.Warning);
                //更新缓存
                _signals.Trigger(_userContainer.UserChangedSignalName);
                _signals.Trigger($"member_{userId}_changed");
            }
            return(result);
        }
Exemple #8
0
        public ApiResult ChangePhoneNumber(string id, [FromBody] ChangePhoneNumberModel member)
        {
            Argument.ThrowIfNullOrEmpty(member.PhoneNumber, "旧手机");
            Argument.ThrowIfNullOrEmpty(member.SmsVerifyCode, "旧手机验证码");
            Argument.ThrowIfNullOrEmpty(member.NewPhoneNumber, "新手机");
            Argument.ThrowIfNullOrEmpty(member.NewSmsVerifyCode, "新手机验证码");

            if (!AuthorizedUser.Id.Equals(id, StringComparison.OrdinalIgnoreCase))
            {
                throw new WebApiInnerException("0001", "只允许修改自己手机");
            }

            if (!_smsService.VerifyCode(member.PhoneNumber, member.SmsVerifyCode, MemberCenterModule.Instance, SmsRequestType.ChangePhoneNumber.ToString()))
            {
                throw new WebApiInnerException("0002", "旧手机短信验证码验证失败");
            }

            if (!_smsService.VerifyCode(member.NewPhoneNumber, member.NewSmsVerifyCode, MemberCenterModule.Instance, SmsRequestType.ChangePhoneNumber.ToString()))
            {
                throw new WebApiInnerException("0003", "新手机短信验证码验证失败");
            }

            //判断是否已经存在此手机号
            var testUser = _userContainer.FindUser(member.NewPhoneNumber);

            if (testUser != null)
            {
                throw new WebApiInnerException("0004", "新手机已经注册,无法更改");
            }
            var user = _userManager.FindById(id);

            user.UserName    = member.NewPhoneNumber;
            user.PhoneNumber = member.NewPhoneNumber;

            var identityResult = _userManager.Update(user);

            if (identityResult.Succeeded)
            {
                //更新缓存
                _signals.Trigger(_userContainer.UserChangedSignalName);
                _signals.Trigger($"member_{AuthorizedUser.Id}_changed");
            }
            else
            {
                throw new WebApiInnerException("0005", "手机号修改失败");
            }
            var result = new ApiResult();

            return(result);
        }
        public ActionResult Index()
        {
            Models.ApplicationUser user = DefaultUserManager.FindById(User.Identity.GetUserId());

            HomeTicketAndProjectsViewModel model = new HomeTicketAndProjectsViewModel();

            if (User.IsInRole(Submitter))
            {
                model.Tickets  = user.CreatedTickets;
                model.Projects = user.Projects;
            }
            else if (User.IsInRole(Developer))
            {
                model.Tickets  = user.AssignedTickets;
                model.Projects = user.Projects;
            }
            else
            {
                model.Tickets  = DbContext.Tickets.Select(p => p).ToList();
                model.Projects = DbContext.Projects.Where(p => !p.Archived).Select(p => p).ToList();
            }

            return(View(model));
        }
        public ActionResult AddAttachment(AttachmentViewModel model, int ticketId)
        {
            if (ModelState.IsValid)
            {
                if (!Directory.Exists(FileHelper.MappedUploadFolder))
                {
                    Directory.CreateDirectory(FileHelper.MappedUploadFolder);
                }

                string fileName         = model.file.FileName;
                string fullPathWithName = FileHelper.MappedUploadFolder + fileName;

                model.file.SaveAs(fullPathWithName);

                Attachment attachment = new Attachment()
                {
                    FileUrl   = FileHelper.UploadFolder + fileName,
                    FileName  = fileName,
                    CreatedBy = DefaultUserManager.FindById(User.Identity.GetUserId()),
                    Ticket    = DbContext.Tickets.FirstOrDefault(p => p.Id == ticketId)
                };

                ApplicationUser user = DefaultUserManager.FindById(User.Identity.GetUserId());

                Ticket ticket = DbContext.Tickets.FirstOrDefault(p => p.Id == ticketId && !p.Project.Archived);

                if (User.IsInRole(Admin) || User.IsInRole(ProjectManager))
                {
                    NotificationService.Create(ticket, $"Ticket attachment added ->> {attachment.FileName}");

                    DbContext.Attachments.Add(attachment);

                    DbContext.SaveChanges();

                    return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
                }
                else if (User.IsInRole(Submitter))
                {
                    if (ticket.CreatedBy == user)
                    {
                        NotificationService.Create(ticket, $"Ticket attachment added ->> {attachment.FileName}");

                        DbContext.Attachments.Add(attachment);

                        DbContext.SaveChanges();

                        return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
                    }
                    else
                    {
                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                }
                else if (User.IsInRole(Developer))
                {
                    if (ticket.AssignedTo == user)
                    {
                        NotificationService.Create(ticket, $"Ticket attachment added ->> {attachment.FileName}");

                        DbContext.Attachments.Add(attachment);

                        DbContext.SaveChanges();

                        return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
                    }
                    else
                    {
                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                }
                else
                {
                    return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
                }
            }
            else
            {
                return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
            }
        }
        public ActionResult EditTicket(TicketViewModel model, int?ticketId)
        {
            string userId = User.Identity.GetUserId();

            if (!ModelState.IsValid || !ticketId.HasValue)
            {
                List <Project> projects = DbContext.Projects
                                          .Where(p => p.Users.Any(q => q.Id == userId) && !p.Archived)
                                          .Select(p => p)
                                          .ToList();

                SelectList projectList = new SelectList(projects, "Id", "Name");

                ViewData["projects"] = projectList;

                SelectList typeList = new SelectList(DbContext.TicketTypes, "Id", "Name");

                ViewData["types"] = typeList;

                SelectList priorityList = new SelectList(DbContext.TicketPriorities, "Id", "Name");

                ViewData["priorities"] = priorityList;

                SelectList statusList = new SelectList(DbContext.TicketStatuses, "Id", "Name");

                ViewData["statuses"] = statusList;

                return(View(model));
            }
            else
            {
                Ticket ticket = DbContext.Tickets
                                .FirstOrDefault(p => p.Id == ticketId && !p.Project.Archived);

                if (ticket.Title != model.Title)
                {
                    History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Title", ticket.Title, model.Title);
                    NotificationService.Create(ticket, $"Ticket title changed to {model.Title}");
                    DbContext.Histories.Add(history);
                    ticket.Title = model.Title;
                }
                ;

                if (ticket.Description != model.Description)
                {
                    History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Description", ticket.Description, model.Description);
                    NotificationService.Create(ticket, $"Ticket description changed to {model.Description}");
                    DbContext.Histories.Add(history);
                    ticket.Description = model.Description;
                }
                ;

                Project project = DbContext.Projects.FirstOrDefault(p => p.Id == model.ProjectId && !p.Archived);

                if (ticket.Project != project)
                {
                    History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Project", ticket.Project.Name, project.Name);
                    NotificationService.Create(ticket, $"Ticket Project changed to {project.Name}");
                    DbContext.Histories.Add(history);
                    ticket.Project = project;
                }
                ;

                TicketType type = DbContext.TicketTypes.FirstOrDefault(p => p.Id == model.TypeId);

                if (ticket.Type != type)
                {
                    History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Type", ticket.Type.Name, type.Name);
                    NotificationService.Create(ticket, $"Ticket type changed to {type.Name}");
                    DbContext.Histories.Add(history);
                    ticket.Type = type;
                }
                ;

                int            priorityId = Convert.ToInt32(model.PriorityId);
                TicketPriority priority   = DbContext.TicketPriorities.FirstOrDefault(p => p.Id == priorityId);

                if (ticket.Priority != priority)
                {
                    History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Priority", ticket.Priority.Name, priority.Name);
                    NotificationService.Create(ticket, $"Ticket priority changed to {priority.Name}");
                    DbContext.Histories.Add(history);
                    ticket.Priority = priority;
                }
                ;

                TicketStatus status = DbContext.TicketStatuses.FirstOrDefault(p => p.Id == model.StatusId);

                if (User.IsInRole(Admin) || User.IsInRole(ProjectManager))
                {
                    if (ticket.Status != status)
                    {
                        History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Status", ticket.Status.Name, status.Name);
                        NotificationService.Create(ticket, $"Ticket status changed to {status.Name}");
                        DbContext.Histories.Add(history);
                        ticket.Status = status;
                    }
                    ;
                }
                else
                {
                    History history = HistoryService.Create(DefaultUserManager.FindById(User.Identity.GetUserId()), ticket, "Status", ticket.Status.Name, "Open");
                    NotificationService.Create(ticket, $"Ticket status changed to Open");
                    DbContext.Histories.Add(history);
                    ticket.Status = DbContext.TicketStatuses.FirstOrDefault(p => p.Name == "Open");
                };

                ticket.DateUpdated = DateTime.Now;

                DbContext.SaveChanges();

                return(RedirectToAction(nameof(TicketsController.AllTickets)));
            }
        }
        public ActionResult EditTicket(int?ticketId)
        {
            string userId = User.Identity.GetUserId();

            if (!ticketId.HasValue && string.IsNullOrEmpty(userId))
            {
                return(RedirectToAction(nameof(TicketsController.AllTickets)));
            }
            else
            {
                Ticket ticket = DbContext.Tickets
                                .FirstOrDefault(p => p.Id == ticketId && !p.Project.Archived);

                TicketViewModel model = new TicketViewModel
                {
                    Id          = ticket.Id,
                    Title       = ticket.Title,
                    Description = ticket.Description,
                    Project     = ticket.Project,
                    Type        = ticket.Type,
                    Priority    = ticket.Priority,
                    Status      = ticket.Status,
                    AssignedTo  = ticket.AssignedTo,
                };

                List <Project> projects = DbContext.Projects
                                          .Where(p => p.Users.Any(q => q.Id == userId) && !p.Archived)
                                          .Select(p => p)
                                          .ToList();

                SelectList projectList = new SelectList(projects, "Id", "Name");

                ViewData["projects"] = projectList;

                SelectList typeList = new SelectList(DbContext.TicketTypes, "Id", "Name");

                ViewData["types"] = typeList;

                SelectList priorityList = new SelectList(DbContext.TicketPriorities, "Id", "Name");

                ViewData["priorities"] = priorityList;

                SelectList statusList = new SelectList(DbContext.TicketStatuses, "Id", "Name");

                ViewData["statuses"] = statusList;

                ApplicationUser user = DefaultUserManager.FindById(userId);

                if (User.IsInRole(Admin) || User.IsInRole(ProjectManager))
                {
                    return(View(model));
                }
                else if (User.IsInRole(Submitter))
                {
                    if (ticket.CreatedBy == user)
                    {
                        return(View(model));
                    }
                    else
                    {
                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                }
                else if (User.IsInRole(Developer))
                {
                    if (ticket.AssignedTo == user)
                    {
                        return(View(model));
                    }
                    else
                    {
                        return(RedirectToAction(nameof(TicketsController.AllTickets)));
                    }
                }
                else
                {
                    return(RedirectToAction(nameof(TicketsController.AllTickets)));
                }
            }
        }
Exemple #13
0
        public ActionResult AddComment(CommentViewModel model, int ticketId)
        {
            if (!ModelState.IsValid)
            {
                return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId }));
            }

            ApplicationUser user = DefaultUserManager.FindById(User.Identity.GetUserId());

            Ticket ticket = DbContext.Tickets.FirstOrDefault(p => p.Id == ticketId && !p.Project.Archived);

            Comment comment = new Comment()
            {
                Title     = model.Title,
                CreatedBy = user,
                Ticket    = ticket
            };

            if (User.IsInRole(Admin) || User.IsInRole(ProjectManager))
            {
                NotificationService.Create(ticket, $"Ticket comment added ->> {comment.Title}");

                DbContext.Comments.Add(comment);

                DbContext.SaveChanges();

                return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
            }
            else if (User.IsInRole(Submitter))
            {
                if (ticket.CreatedBy == user)
                {
                    NotificationService.Create(ticket, $"Ticket comment added ->> {comment.Title}");

                    DbContext.Comments.Add(comment);

                    DbContext.SaveChanges();

                    return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
                }
                else
                {
                    return(RedirectToAction(nameof(TicketsController.AllTickets)));
                }
            }
            else if (User.IsInRole(Developer))
            {
                if (ticket.AssignedTo == user)
                {
                    NotificationService.Create(ticket, $"Ticket comment added ->> {comment.Title}");

                    DbContext.Comments.Add(comment);

                    DbContext.SaveChanges();

                    return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
                }
                else
                {
                    return(RedirectToAction(nameof(TicketsController.AllTickets)));
                }
            }
            else
            {
                return(RedirectToAction(nameof(TicketsController.Details), "Tickets", new { ticketId = model.Id }));
            }
        }