예제 #1
0
        public async Task<IActionResult> ManageUsers(IEnumerable<string> AdminUsers)
        {
            var adminRole = Context.Roles.FirstOrDefault(Role => Role.Name == "Admin");
            if (adminRole == null)
            {
                throw new InvalidDataException("Admin role not found");
            }

            // Remove users that are no longer admin
            var oldAdminsToDelete = (from User in Context.Users
                join UserRole in Context.UserRoles on User.Id equals UserRole.UserId
                join Role in Context.Roles on UserRole.RoleId equals Role.Id
                where Role.Name == adminRole.Name
                      && !AdminUsers.Contains(User.Email)
                select new {User, UserRole, Role}).ToList();
            foreach (var user in oldAdminsToDelete)
            {
                await UserManager.RemoveFromRoleAsync(user.User, adminRole.Name);
            }

            // Add new admin users
            var newAdminsToAdd = (from User in Context.Users
                where Context.UserRoles.Count(UserRole => UserRole.UserId == User.Id && UserRole.RoleId == adminRole.Id) == 0 // As of 04.01.2016, the EF7 RC1 does translate an errorenous SQL when using .Any() in a sub query here, need to fall back to "Count() == 0"
                      && AdminUsers.Contains(User.Email)
                select User).ToList();
            foreach (var user in newAdminsToAdd)
            {
                await UserManager.AddToRoleAsync(user, adminRole.Name);
            }

            ViewBag.SuccessMessage = "Updated users.";
            var model = new ManageUsersViewModel();
            model.Users = Context.Users.Select(WebsiteUser => new UserAdminRoleViewModel { Name = WebsiteUser.Email, IsAdmin = WebsiteUser.Roles.Any(Role => Role.RoleId == adminRole.Id)});
            return View(model);
        }
예제 #2
0
 public IActionResult ManageUsers()
 {
     var adminRoleId = Context.Roles.FirstOrDefault(Role => Role.Name == "Admin").Id;
     var model = new ManageUsersViewModel();
     model.Users = Context.Users.Select(User => new UserAdminRoleViewModel { Name = User.Email, IsAdmin = User.Roles.Any(Role => Role.RoleId == adminRoleId)});
     return View(model);
 }