コード例 #1
0
        public ActionResult EditGroup(string id, FormCollection fields)
        {
            INestedRoleProvider nested = Roles.Provider as INestedRoleProvider;
            ExtendedRole        role   = nested.ExtendedGetRole(id);
            string origName            = role.Name;

            TryUpdateModel(role, new[] { "EmailAddress", "Name" });

            ModelState.SetModelValue("Owners", new ValueProviderResult(fields["Owners"], fields["Owners"], CultureInfo.CurrentUICulture));
            role.Owners.Clear();
            role.Owners.AddRange((fields["Owners"] ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(f => new Guid(f.Trim())));

            ModelState.SetModelValue("Destinations", new ValueProviderResult(fields["Destinations"], fields["Destinations"], CultureInfo.CurrentUICulture));
            role.Destinations.Clear();
            role.Destinations.AddRange((fields["Destinations"] ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()));

            try
            {
                nested.UpdateRole(role, origName);
                ViewData["success"] = "Saved OK";
            }
            catch (Exception e)
            {
                ViewData["error"] = e.ToString();
            }

            return(View(role));
        }
コード例 #2
0
 public ActionResult ModifyRole(FormCollection form)
 {
     using (Trainee15Entities db = new Trainee15Entities())
     {
         ExtendedRole viewModel = new ExtendedRole();
         viewModel.rolesList      = db.Roles.ToList();
         viewModel.rolesTableList = db.Roles.ToList();
         try
         {
             // Checkbox is the attribute name.
             // Returns values of the boxes that have been checked as csv.
             string[] checkboxes = form["checkbox"].Split(',');
             if (checkboxes.Length != 1) // More than 1 checkbox selected.
             {
                 TempData["Message"] = "Error: Can only select one to modify from table";
                 return(View("RoleMaintenance", viewModel));
             }
             else
             {
                 int  iSelectRole = int.Parse(checkboxes[0]);
                 Role role        = db.Roles.SingleOrDefault(x => x.roleID == iSelectRole);
                 return(View("ModifyRole", role));
             }
         }
         catch (Exception e) // Catch exception when no item from table was selected.
         {
             TempData["Message"] = "Error: No item was selected from table.";
             return(View("RoleMaintenance", viewModel));
         }
     }
 }
コード例 #3
0
        public ContentResult ContactList(string id)
        {
            INestedRoleProvider nested = Roles.Provider as INestedRoleProvider;
            ExtendedRole        role   = nested.ExtendedGetRole(id);

            return(Content(string.Join("; ", nested.GetUsersInRole(id, true).Select(f => Membership.GetUser(f).Email).Distinct().ToArray()), "text/plain"));
        }
コード例 #4
0
        public ActionResult EditGroup(string id)
        {
            ExtendedRole role = Kcsar.Membership.RoleProvider.GetRole(id);

            ViewData["Destinations"] = string.Join(", ", role.Destinations.ToArray());
            ViewData["Owners"]       = string.Join(", ", role.Owners.Select(f => f.ToString()).ToArray());
            return(View(role));
        }
コード例 #5
0
 public ActionResult AddUser()
 {
     using (Trainee15Entities db = new Trainee15Entities())
     {
         ExtendedRole roles = new ExtendedRole();
         roles.rolesList = db.Roles.Where(x => x.status == true).ToList();
         return(View(roles));
     }
 }
コード例 #6
0
 // Role Maintenance landing page.
 public ActionResult RoleMaintenance(ExtendedRole roles)
 {
     using (Trainee15Entities db = new Trainee15Entities())
     {
         roles.rolesList = db.Roles.ToList();
         List <Role> list = new List <Role>();
         roles.rolesTableList = list;
         return(View(roles));
     }
 }
コード例 #7
0
        public ActionResult MenuRoleDatabase(FormCollection form)
        {
            using (Trainee15Entities db = new Trainee15Entities())
            {
                var          roleID    = int.Parse(form["selectRole"]);
                ExtendedRole viewModel = new ExtendedRole();
                try
                {
                    // Checkbox is the attribute name.
                    // Returns values of the boxes that have been checked as csv.
                    string[] checkboxes = form["checkbox"].Split(',');

                    var menus = db.Menus.ToList();
                    var role  = db.Roles.SingleOrDefault(x => x.roleID == roleID);
                    foreach (var menu in menus)
                    {
                        // Add to menu to role.
                        if (checkboxes.Contains(menu.menuID.ToString()))
                        {
                            if (!menu.Roles.Contains(role))
                            {
                                db.Menus.SingleOrDefault(x => x.menuID == menu.menuID).Roles.Add(role);
                                db.SaveChanges();
                            }
                        }
                        // Remove menu from role.
                        if (!checkboxes.Contains(menu.menuID.ToString()))
                        {
                            if (menu.Roles.Contains(role))
                            {
                                db.Roles.SingleOrDefault(x => x.roleID == role.roleID).Menus.Remove(menu);
                                db.SaveChanges();
                            }
                        }
                    }

                    viewModel.rolesList = db.Roles.ToList();
                    List <Role> list = new List <Role>();
                    viewModel.rolesTableList = list;
                    TempData["Message"]      = " Role - Menu updated.";
                    return(View("RoleMaintenance", viewModel));
                }
                catch (Exception e) // Catch exception when no item from table was selected.
                {
                    viewModel.role      = db.Roles.SingleOrDefault(x => x.roleID == roleID);
                    viewModel.menu      = db.Menus.ToList();
                    viewModel.menuRole  = viewModel.role.Menus.ToList();
                    TempData["Message"] = "Error: No item was selected from table.";
                    return(View("MenuRole", viewModel));
                }
            }
        }
コード例 #8
0
        public async Task <ActionResult> Edit(ExtendedRole model)
        {
            var status = await _roleManager.UpdateAsync(model);

            if (status.Succeeded)
            {
                TempData["Message"] = "Updated Successfully";
                return(RedirectToAction("Details", new { Id = model.Id }));
            }
            else
            {
                TempData["Message"] = status.Errors.ToString();
                return(View("Error"));
            }
        }
コード例 #9
0
        public ActionResult AddRole(FormCollection form)
        {
            using (Trainee15Entities db = new Trainee15Entities())
            {
                // Calling database function down below.
                Database(form, true);

                ExtendedRole viewModel = new ExtendedRole();
                viewModel.rolesList = db.Roles.ToList();
                List <Role> list = new List <Role>();
                viewModel.rolesTableList = list;
                TempData["Message"]      = "Role has been successfully added!";
                return(View("RoleMaintenance", viewModel));
            }
        }
コード例 #10
0
        public async Task <ActionResult> Create(ExtendedRole model)
        {
            var result = await _roleManager.CreateAsync(model);

            if (result.Succeeded)
            {
                TempData["Message"] = "Created Successfully";
                return(RedirectToAction("Details", new { Id = model.Id }));
            }
            else
            {
                TempData["Message"] = result.Errors.ToString();
                return(View("Error"));
            }
        }
コード例 #11
0
        protected override void Seed(Pluralsight.AspNetDemo.DAL.ExtendedUserDbContext context)
        {
            ApplicationUserManager UserManager = new ApplicationUserManager(new UserStore <ExtendedUser>(context));

            var ItRole = new ExtendedRole
            {
                Id      = Guid.NewGuid().ToString(),
                Name    = "IT",
                Details = "Super admin"
            };



            context.Roles.AddOrUpdate(ItRole);
            context.SaveChanges();
            //Modify this after  download from github
            var password = UserManager.PasswordHasher.HashPassword("Password_2020");

            var UserAdmin = new ExtendedUser
            {
                UserName         = "******",
                Email            = "*****@*****.**",
                FullName         = "Nombres Apellidos",
                PhoneNumber      = "+0000000000",
                PasswordHash     = password,
                TwoFactorEnabled = true,
                EmailConfirmed   = false,
                LockoutEnabled   = true
            };

            UserManager.Create(UserAdmin);



            context.SaveChanges();

            var userRole = new ApplicationUserRole
            {
                RoleId = ItRole.Id,
                UserId = UserAdmin.Id
            };

            context.ApplicationUserRole.AddOrUpdate(userRole);

            ItRole.Users.Add(userRole);

            context.SaveChanges();
        }
コード例 #12
0
        private bool CanUserEditRoleMembership(string id)
        {
            if (User.IsInRole("site.accounts"))
            {
                return(true);
            }

            INestedRoleProvider nested = Roles.Provider as INestedRoleProvider;

            if (nested == null)
            {
                return(false);
            }

            ExtendedRole role = nested.ExtendedGetRole(id);

            return(role.Owners.Contains(Permissions.UserId));
        }
コード例 #13
0
 public ActionResult QueryRole(FormCollection form)
 {
     using (Trainee15Entities db = new Trainee15Entities())
     {
         var selectRole = form["selectRole"];
         var viewModel  = new ExtendedRole();
         if (selectRole != "")
         {
             int iSelectRole = int.Parse(selectRole);
             viewModel.rolesList      = db.Roles.ToList();
             viewModel.rolesTableList = db.Roles.Where(x => x.roleID == iSelectRole).ToList();
         }
         else
         {
             viewModel.rolesList      = db.Roles.ToList();
             viewModel.rolesTableList = db.Roles.ToList();
         }
         return(View("RoleMaintenance", viewModel));
     }
 }
コード例 #14
0
        public ActionResult GroupMembership(string id)
        {
            ExtendedRole        group  = Kcsar.Membership.RoleProvider.GetRole(id);
            INestedRoleProvider nested = Roles.Provider as INestedRoleProvider;

            ViewData["Title"] = "Membership for group " + id + " " + User.IsInRole("cdb.admins").ToString() + User.IsInRole("site.accounts").ToString() + User.IsInRole("admins").ToString();
            GroupMembershipView view = new GroupMembershipView
            {
                GroupName  = group.Name,
                ShowGroups = false,
                CanEdit    = CanUserEditRoleMembership(id)
            };

            var users = Membership.GetAllUsers();

            var currentUsers = Roles.GetUsersInRole(id);

            view.CurrentUsers = new SelectList(currentUsers);

            List <string> otherUsers = new List <string>();

            foreach (MembershipUser u in Membership.GetAllUsers())
            {
                if (!currentUsers.Contains(u.UserName))
                {
                    otherUsers.Add(u.UserName);
                }
            }
            view.OtherUsers = new SelectList(otherUsers);


            if (nested != null)
            {
                view.ShowGroups = true;
                var currentGroups = nested.GetRolesInRole(id, false);
                view.CurrentGroups = new SelectList(currentGroups);
                view.OtherGroups   = new SelectList(Roles.GetAllRoles().Where(g => !currentGroups.Contains(g)));
            }

            return(View(view));
        }
コード例 #15
0
        public ActionResult DeleteRole(FormCollection form)
        {
            using (Trainee15Entities db = new Trainee15Entities())
            {
                ExtendedRole viewModel = new ExtendedRole();

                try
                {
                    // Checkbox is the attribute name.
                    // Returns values of the boxes that have been checked as csv.
                    string[] checkboxes = form["checkbox"].Split(',');
                    foreach (var role in checkboxes)
                    {
                        int iRoleID = Int32.Parse(role);
                        // Delete role-menu relationship first before deleting roles.
                        List <Menu> dropMenus = db.Roles.SingleOrDefault(r => r.roleID == iRoleID).Menus.ToList();
                        foreach (var drop in dropMenus)
                        {
                            db.Roles.SingleOrDefault(r => r.roleID == iRoleID).Menus.Remove(drop);
                        }
                        Role deleteRole = db.Roles.SingleOrDefault(r => r.roleID == iRoleID);
                        db.Roles.Remove(deleteRole);
                        db.SaveChanges();
                    }
                    viewModel.rolesList = db.Roles.ToList();
                    List <Role> list = new List <Role>();
                    viewModel.rolesTableList = list;
                    TempData["Message"]      = "One or more role has been successfully deleted!";
                    return(View("RoleMaintenance", viewModel));
                }
                catch (Exception e) // Catch exception when no item from table was selected.
                {
                    viewModel.rolesList = db.Roles.ToList();
                    List <Role> list = new List <Role>();
                    viewModel.rolesTableList = list;
                    TempData["Message"]      = "Error: No item was selected from table.";
                    return(View("RoleMaintenance", viewModel));
                }
            }
        }
コード例 #16
0
        //[Authorize]
        //public ActionResult ReconcileSubscriptions()
        //{
        //    string msgs = string.Empty;
        //    INestedRoleProvider nested = Roles.Provider as INestedRoleProvider;
        //    Dictionary<string, List<Guid>> visitedGroups = new Dictionary<string, List<Guid>>();

        //    using (var ctx = GetContext())
        //    {
        //        foreach (var role in Kcsar.Membership.RoleProvider.GetRoles())
        //        {
        //            msgs += "============= " + role.Name + "==================\n";
        //            if (string.IsNullOrWhiteSpace(role.EmailAddress))
        //            {
        //                continue;
        //            }
        //            msgs += "============= " + role.Name + "==================\n";
        //            ReconcileSubscriptions(role.Name, nested, ctx, visitedGroups, ref msgs);
        //        }
        //        //ctx.SaveChanges();
        //    }
        //    return new ContentResult { Content = "Done\n" + msgs, ContentType = "text/plain" };
        //}

        //private void ReconcileSubscriptions(string role, INestedRoleProvider nested, KcsarContext ctx, Dictionary<string, List<Guid>> visited, ref string msgs)
        //{
        //    List<Guid> users = new List<Guid>();
        //    BuildMembershipListForSubscriptions(role, nested, users, visited, ref msgs);

        //    Guid lastUser = Guid.Empty;
        //    foreach (var row in (from s in ctx.PersonSubscription where s.ListName == role select new { User = s.Person.Id, Record = s }).OrderBy(f => f.User))
        //    {
        //        // Keep track of the users we've seen so we can figure out which ones in the 'users' list are new.
        //        // Because a member can have multiple subscriptions per list, we need to only
        //        // act at the transition to a new user
        //        if (row.User != lastUser && lastUser != Guid.Empty)
        //        {
        //            msgs += string.Format("-- {0}: users.Remove({1})\n", role, lastUser);
        //            users.Remove(lastUser);
        //        }
        //        lastUser = row.User;

        //        if (!users.Contains(row.User))
        //        {
        //            string.Format("-- {0}: ctx.DeleteObject({1})\n", role, row.Record);
        //            ctx.DeleteObject(row.Record);
        //        }
        //    }
        //    if (lastUser != Guid.Empty)
        //    {
        //        msgs += string.Format("-- {0}: users.Remove({1})\n", role, lastUser);
        //        users.Remove(lastUser);
        //    }

        //    foreach (Guid user in users)
        //    {
        //        PersonSubscription sub = new PersonSubscription
        //        {
        //            Person = (from m in ctx.Members where m.Id == user select m).First(),
        //            ListName = role
        //        };
        //        System.Diagnostics.Debug.WriteLine(string.Format("{0} {1}", role, user));
        //        msgs += string.Format("-- {0}: ctx.AddToPersonSubscription({1})\n", role, sub.Person.FullName);
        //        ctx.AddToPersonSubscription(sub);
        //        try
        //        {
        //            //ctx.SaveChanges();
        //        }
        //        catch
        //        {
        //        }
        //    }
        //}

        /// <summary>
        /// Gets the membership of a group, with special logic for recursion. For each member of this group:
        ///  - If the child is a user, add the user to the list.
        ///  - If the child is a group, and the group has an email address, only add the email address of the group
        ///  - If the child is a group, and there is no email address, recursively add group's children.
        /// </summary>
        /// <param name="role"></param>
        /// <param name="nested"></param>
        /// <param name="users"></param>
        /// <param name="visited"></param>
        private void BuildMembershipListForSubscriptions(string role, INestedRoleProvider nested, List <Guid> users, Dictionary <string, List <Guid> > visited, ref string msgs)
        {
            List <Guid> myUsers = new List <Guid>();

            // If we've already cached this group, then we don't need to rebuild it.
            if (!visited.ContainsKey(role))
            {
                // Get all users in the group
                foreach (var username in nested.GetUsersInRole(role, false))
                {
                    Guid?key = Kcsar.Membership.MembershipProvider.UsernameToMemberKey(username);
                    if (key.HasValue && !users.Contains(key.Value))
                    {
                        myUsers.Add(key.Value);
                    }
                }

                foreach (var child in nested.GetRolesInRole(role, false))
                {
                    ExtendedRole r = Kcsar.Membership.RoleProvider.GetRole(child);
                    if (string.IsNullOrEmpty(r.EmailAddress))
                    {
                        BuildMembershipListForSubscriptions(child, nested, users, visited, ref msgs);
                    }
                }

                visited.Add(role, myUsers);
            }

            // Add any new children to the group.
            foreach (Guid user in myUsers)
            {
                if (!users.Contains(user))
                {
                    users.Add(user);
                }
            }
        }
コード例 #17
0
 public void CreateRole(string roleName, string roleDescription)
 {
     ExtendedRole role = new ExtendedRole(roleName, roleDescription, RoleStatus.Active);
     ExtendedRoles.CreateRole(role);
 }