Example #1
0
        public async Task <ActionResult> Create([Bind(Include = "Id,Name,Greeting,Created")] Household household)
        {
            if (ModelState.IsValid)
            {
                var userId = User.Identity.GetUserId();
                var user   = db.Users.Find(userId);
                //unassign
                foreach (var userRole in roleHelper.ListUserRole(userId))
                {
                    roleHelper.RemoveUserFromRole(userId, userRole);
                }
                //assign
                roleHelper.AddUserToRole(userId, "HouseholdOwner");


                household.Created = DateTime.Now;
                db.Households.Add(household);
                //gives new household ID
                user.HouseholdId = household.Id;

                db.SaveChanges();
                //log out and back in to update
                await HttpContext.RefreshAuthentication(user);

                return(RedirectToAction("Index", "Home"));
            }

            return(View(household));
        }
 public ActionResult UserIndex(string userId, string roleName)
 {
     foreach (var role in roleHelper.ListUserRoles(userId))
     {
         roleHelper.RemoveUserFromRole(userId, role);
     }
     if (!string.IsNullOrEmpty(roleName))
     {
         roleHelper.AddUserToRole(userId, roleName);
     }
     return(RedirectToAction("UserIndex"));
 }
        public ActionResult ManageSingleRole(string userId, string userRole)
        {
            //remove user from any role they have assigned already
            foreach (var role in roleHelper.ListUserRoles(userId))
            {
                roleHelper.RemoveUserFromRole(userId, role);
            }
            //if userRole is not null, assign them the role selected
            if (!string.IsNullOrEmpty(userRole))
            {
                roleHelper.AddUserToRole(userId, userRole);
            }

            return(RedirectToAction("UserIndex"));
        }
        public async Task<ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
                var result = await UserManager.CreateAsync(user, model.Password);
                if (result.Succeeded)
                {
                    UserRoleHelper.AddUserToRole(user.Id, model.Role);
                    await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);

                    // For more information on how to enable account confirmation and password reset please visit https://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", "Manage");
                }
                AddErrors(result);
            }
            ViewBag.Role = new SelectList(db.Roles, "Name", "Name");
            // If we got this far, something failed, redisplay form
            return View(model);
        }
Example #5
0
        public ActionResult ManageRoles(List <string> userIds, string roleName)
        {
            // Use our RoleHelper to actually  assign the role to the person or persons selected
            if (userIds != null)
            {
                foreach (var userId in userIds)
                {
                    // First I need to determine what Role if any the user is in
                    var userRole = userRoleHelper.ListUserRoles(userId).FirstOrDefault();

                    if (!string.IsNullOrEmpty(userRole))
                    {
                        // Second I have to remove each of the selected users from their current Role
                        userRoleHelper.RemoveUserFromRole(userId, userRole);
                    }

                    if (!string.IsNullOrEmpty(roleName))
                    {
                        // Then I will add each selected user to the selected Role
                        userRoleHelper.AddUserToRole(userId, roleName);
                    }
                }
            }

            return(RedirectToAction("ManageRoles"));
        }
        // Leave Household
        public async Task <ActionResult> LeaveAsync()
        {
            var userId = User.Identity.GetUserId();

            var myRole = roleHelper.ListUserRoles(userId).FirstOrDefault();
            var user   = db.Users.Find(userId);

            switch (myRole)
            {
            case "Owner":

                var members = db.Users.Where(u => u.HouseholdId == user.HouseholdId).Count() - 1;
                if (members >= 1)
                {
                    TempData["Message"] = $"You are unable to leave the Household! There are still <b>{members}</b> other members in the house, you must select one of them to assume your role.";
                    return(RedirectToAction("ExitDenied"));
                }
                user.Household.IsDeleted = true;
                user.HouseholdId         = null;
                db.Users.Remove(user);
                db.SaveChanges();

                roleHelper.RemoveUserFromRole(userId, "Owner");
                roleHelper.AddUserToRole(userId, "NewUser");
                await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);

                return(RedirectToAction("Dashboard", "Households"));

            case "Member":
            default:
                // Removing all user's data from the database
                // This method doesn't allow for the user to maintain their data
                //db.Users.Remove(user);
                //db.SaveChanges();

                roleHelper.RemoveUserFromRole(userId, "Member");
                roleHelper.AddUserToRole(userId, "NewUser");


                await HttpContextBaseExtension.RefreshAuthentication(HttpContext, user);

                return(RedirectToAction("Login", "Account"));
            }
        }
Example #7
0
 public ActionResult ManageUserRole(string id, string roleName)
 {
     foreach (var role in roleHelper.ListUserRoles(id))
     {
         roleHelper.RemoveUserFromRole(id, role);
     }
     if (!string.IsNullOrEmpty(roleName))
     {
         roleHelper.AddUserToRole(id, roleName);
     }
     return(RedirectToAction("Index", new { id }));
 }
        public ActionResult EditUser([Bind(Include = "User, Roles, SelectedRoles")] AdminUserViewModel model)
        {
            var            userId = model.User.Id;
            UserRoleHelper helper = new UserRoleHelper();

            foreach (var rolermv in db.Roles.Select(r => r.Name).ToList())
            {
                helper.RemoveUserFromRole(userId, rolermv);
            }
            foreach (var roleadd in model.SelectedRoles)
            {
                helper.AddUserToRole(userId, roleadd);
            }
            return(RedirectToAction("Index"));
        }
        public ActionResult Create([Bind(Include = "Name")] Household household)
        {
            if (ModelState.IsValid)
            {
                db.Households.Add(household);
                db.SaveChanges();
                var headOfHouseHold = User.Identity.GetUserId();
                HouseholdsHelper.AddUserToHousehold(headOfHouseHold, household.Id);
                UserRoleHelper.AddUserToRole(headOfHouseHold, "HeadOfHouseHold");
                household.HouseholdCreatorId = headOfHouseHold;
                household.Created            = DateTimeOffset.Now;
                return(RedirectToAction("Details", "Households"));
            }

            return(View(household));
        }
 public ActionResult ManageRoles(List <string> userIds, string roleName)
 {
     if (userIds == null)
     {
         return(RedirectToAction("RolesIndex"));
     }
     foreach (var userId in userIds)
     {
         foreach (var roleList in roleHelper.ListUserRoles(userId))
         {
             roleHelper.RemoveUserFromRole(userId, roleList);
         }
         if (!string.IsNullOrEmpty(roleName))
         {
             roleHelper.AddUserToRole(userId, roleName);
         }
     }
     return(RedirectToAction("ManageRoles"));
 }
        public ActionResult ManageUser(ManageUserVM userVM, string roleName, string projects)
        {
            List <Project> oldProjects = projectHelper.ListUserProjects(userVM.UserId).ToList();
            var            oldUser     = db.Users.AsNoTracking().FirstOrDefault(u => u.Id == userVM.UserId);

            var user = db.Users.Find(userVM.UserId);

            user.Email       = userVM.Email;
            user.UserName    = userVM.Email;
            user.FirstName   = userVM.FirstName;
            user.LastName    = userVM.LastName;
            user.PhoneNumber = userVM.PhoneNumber;
            user.AvatarPath  = userVM.AvatarPath;

            if (FileUploadValidator.IsWebFriendlyImage(userVM.Avatar))
            {
                var fileName     = FileStamp.MakeUnique(userVM.Avatar.FileName);
                var serverFolder = WebConfigurationManager.AppSettings["DefaultAvatarFolder"];
                userVM.Avatar.SaveAs(Path.Combine(Server.MapPath(serverFolder), fileName));
                user.AvatarPath = $"{serverFolder}{fileName}";
            }

            db.SaveChanges();
            projectHelper.updateUserProjects(userVM.UserId, userVM.ProjectIds);



            if (roleName != null)
            {
                foreach (var role in roleHelper.ListUserRoles(user.Id))
                {
                    roleHelper.RemoveUserFromRole(user.Id, role);
                }
                if (!string.IsNullOrEmpty(roleName))
                {
                    roleHelper.AddUserToRole(user.Id, roleName);
                }
            }
            var newUser = db.Users.AsNoTracking().FirstOrDefault(u => u.Id == userVM.UserId);

            historyHelper.CheckUserEdits(oldUser, newUser, oldProjects);
            return(RedirectToAction("Index"));
        }
Example #12
0
        public ActionResult EditUserRoles(AdminUserViewModel model)
        {
            var            user   = db.Users.Find(model.User.Id);
            UserRoleHelper helper = new UserRoleHelper();

            foreach (var role in db.Roles.Select(r => r.Name).ToList())
            {
                helper.RemoveUserFromRole(user.Id, role);
            }
            if (model.SelectedRoles != null)
            {
                foreach (var role in model.SelectedRoles)
                {
                    helper.AddUserToRole(user.Id, role);
                }
                return(RedirectToAction("Index"));
            }
            return(RedirectToAction("Index"));
        }
Example #13
0
        public ActionResult ManageRoles(List <string> userIds, string roleName)
        {
            //Step:1 If anyone was selected, remove them from all of their roles.

            //If people were selected, Spin through them and strip them of their roles
            foreach (var userId in userIds)
            {
                //Determine if this user occupies a role.
                foreach (var role in roleHelper.ListUserRoles(userId).ToList())
                {
                    roleHelper.RemoveUserFromRole(userId, role);
                }
                //If a role was seleceted add the user back to it.
                //Step 2: If a role was chosen, Add each person to that role.
                if (!string.IsNullOrEmpty(roleName))
                {
                    roleHelper.AddUserToRole(userId, roleName);
                }
            }
            return(RedirectToAction("ManageRoles"));
        }
        public ActionResult LeaveHousehold()
        {
            var userId = User.Identity.GetUserId();

            if (User.IsInRole("HeadOfHouseHold"))
            {
                var householdId = db.Users.Find(userId).HouseholdId;

                UserRoleHelper.RemoveUserFromRole(userId, "HeadOfHousehold");
                HouseholdsHelper.RemoveUserFromHousehold(userId);

                var members = db.Users.Where(u => u.HouseholdId == householdId).ToList();

                var roleHelper = new UserRoleHelper();
                foreach (var member in members)
                {
                    if (roleHelper.IsUserInRole(member.Id, "Member"))
                    {
                        UserRoleHelper.RemoveUserFromRole(member.Id, "Member");
                        UserRoleHelper.AddUserToRole(member.Id, "HeadOfHousehold");
                        break;
                    }
                }

                return(RedirectToAction("ProfileView", "Account"));
            }
            else
            {
                UserRoleHelper.RemoveUserFromRole(userId, "Member");
                HouseholdsHelper.RemoveUserFromHousehold(userId);
                Household household = db.Households.Find(userId);
                if (household.Users.Count == 0)
                {
                    household.Deleted = true;
                }
                return(RedirectToAction("ProfileView", "Account"));
            }
        }
        public async Task <ActionResult> RegisterFromInvite(RegisterFromInviteViewModel model, HttpPostedFileBase image, Guid Code)
        {
            if (ModelState.IsValid)
            {
                var errorMsg = new StringBuilder();

                var invite = db.Invitations.FirstOrDefault(i => i.Code == model.Code);

                if (invite == null)
                {
                    errorMsg.Append("You have not been invited.");
                }
                else
                {
                    if (DateTime.Now > invite.Expires)
                    {
                        errorMsg.Append("Invitation Expired.");
                    }
                    if (model.Code != invite.Code)
                    {
                        errorMsg.Append("InvalidCode.");
                    }
                    if (invite.Accepted)
                    {
                        errorMsg.Append("Invitation already accepted");
                    }
                }

                var result = new IdentityResult();

                if (errorMsg.ToString() == string.Empty)
                {
                    var user = new ApplicationUser
                    {
                        FirstName   = model.FirstName,
                        LastName    = model.LastName,
                        UserName    = model.Email,
                        Email       = model.Email,
                        HouseholdId = invite.HouseholdId
                    };

                    if (UserHelper.IsWebFriendlyImage(image))
                    {
                        var fileName = Path.GetFileName(image.FileName);
                        image.SaveAs(Path.Combine(Server.MapPath("~/Uploads/"), fileName));
                        user.ProfileImagePath = "/Uploads/" + fileName;
                    }

                    result = await UserManager.CreateAsync(user, model.Password);

                    if (result.Succeeded)
                    {
                        db.Invitations.Attach(invite);
                        invite.Accepted     = true;
                        invite.AcceptedTime = DateTime.Now;
                        invite.IsValid      = false;
                        db.SaveChanges();

                        UserRoleHelper.AddUserToRole(user.Id, "Member");
                        await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);

                        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("ProfileView", "Account"));
                    }
                }
                else
                {
                    TempData["ErrorMsg"] = errorMsg.ToString();
                    return(RedirectToAction("Details", "Households", new { id = invite.HouseholdId }));
                }

                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            return(View(model));
        }
Example #16
0
        public async Task <ActionResult> CreateNewUser(CreateNewUserViewModel model, List <int> AllProjects, string RoleName)
        {
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser
                {
                    UserName    = model.Email,
                    Email       = model.Email,
                    FirstName   = model.FirstName,
                    LastName    = model.LastName,
                    AvatarPath  = WebConfigurationManager.AppSettings["DefaultAvatarPath"],
                    PhoneNumber = model.PhoneNumber
                };
                if (model.Avatar != null)
                {
                    if (FileUploadValidator.IsWebFriendlyImage(model.Avatar))
                    {
                        var fileName     = FileStamp.MakeUnique(model.Avatar.FileName);
                        var serverFolder = WebConfigurationManager.AppSettings["DefaultAvatarFolder"];
                        model.Avatar.SaveAs(Path.Combine(Server.MapPath(serverFolder), fileName));
                        user.AvatarPath = $"{serverFolder}{fileName}";
                    }
                }
                var result = await UserManager.CreateAsync(user, Membership.GeneratePassword(12, 1));

                if (result.Succeeded)
                {
                    roleHelper.AddUserToRole(user.Id, RoleName);

                    foreach (var projectId in AllProjects)
                    {
                        projectHelper.AddUserToProject(user.Id, projectId);
                    }


                    // For more information on how to enable account confirmation and password reset please visit https://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);

                    try
                    {
                        var from  = "BugTracker Admin<*****@*****.**>";
                        var email = new MailMessage(from, model.Email)
                        {
                            Subject    = "Confirm Your Account",
                            Body       = "Please confirm your account by Clicking here <a href=\"" + callbackUrl + "\">here</a> ",
                            IsBodyHtml = true
                        };
                        var svc = new EmailService();
                        await svc.SendAsync(email);

                        //return View(new EmailModel());
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        await Task.FromResult(0);
                    }

                    //await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");

                    return(RedirectToAction("Login", "Account"));
                }
                AddErrors(result);
            }

            // If we got this far, something failed, redisplay form
            ViewBag.AllProjects = new MultiSelectList(db.Projects.ToList(), "Id", "Name");
            ViewBag.RoleName    = new SelectList(db.Roles, "Name", "Name", "Default");
            return(View(model));
        }
Example #17
0
        public ActionResult AssignRole(string id, AssignRoleViewModel formData)
        {
            var admin = "Admin";
            var dev   = "Developer";
            var pjm   = "Project Manager";
            var sub   = "Submitter";

            var checkIfAdmin = UserRoleHelper.IsUserInRole(id, admin);
            var checkIfDev   = UserRoleHelper.IsUserInRole(id, dev);
            var checkIfPm    = UserRoleHelper.IsUserInRole(id, pjm);
            var checkIfSub   = UserRoleHelper.IsUserInRole(id, sub);

            if (formData.User.IsAdmin)
            {
                if (!checkIfAdmin)
                {
                    UserRoleHelper.AddUserToRole(id, admin);
                }
            }
            else
            {
                if (checkIfAdmin)
                {
                    UserRoleHelper.RemoveUserFromRole(id, admin);
                }
            }

            if (formData.User.IsDev)
            {
                if (!checkIfDev)
                {
                    UserRoleHelper.AddUserToRole(id, dev);
                }
            }
            else
            {
                if (checkIfDev)
                {
                    UserRoleHelper.RemoveUserFromRole(id, dev);
                }
            }
            if (formData.User.IsPm)
            {
                if (!checkIfPm)
                {
                    UserRoleHelper.AddUserToRole(id, pjm);
                }
            }
            else
            {
                if (checkIfPm)
                {
                    UserRoleHelper.RemoveUserFromRole(id, pjm);
                }
            }
            if (formData.User.IsSub)
            {
                if (!checkIfSub)
                {
                    UserRoleHelper.AddUserToRole(id, sub);
                }
            }
            else
            {
                if (checkIfSub)
                {
                    UserRoleHelper.RemoveUserFromRole(id, sub);
                }
            }

            var allUsers = DbContext.Users.Select(n => new UserForAssignRoleViewModel
            {
                Id       = n.Id,
                UserName = n.UserName
            }).ToList();

            var roles = DbContext.Roles.Select(n => n.Name).ToList();

            foreach (var p in allUsers)
            {
                p.IsAdmin = UserRoleHelper.IsUserInRole(p.Id, admin);
                p.IsDev   = UserRoleHelper.IsUserInRole(p.Id, dev);
                p.IsPm    = UserRoleHelper.IsUserInRole(p.Id, pjm);
                p.IsSub   = UserRoleHelper.IsUserInRole(p.Id, sub);

                p.DisplayIsAdmin = (p.IsAdmin) ? "fas fa-check" : "fas fa-times";
                p.DisplayIsDev   = (p.IsDev) ? "fas fa-check" : "fas fa-times";
                p.DisplayIsPm    = (p.IsPm) ? "fas fa-check" : "fas fa-times";
                p.DisplayIsSub   = (p.IsSub) ? "fas fa-check" : "fas fa-times";
            }

            var model = new AssignRoleManagementViewModel();

            model.Users.AddRange(allUsers);
            model.Roles.AddRange(roles);

            return(View("AssignRoleManagement", model));
        }