Выберите все роли, кроме администратора.C # ASP.NET MVC - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть действие контроллера, которое я должен изменить / добавить роли в разделе администратора.Я использовал этот же код в разделе пользователей для использования администратором компании, чтобы иметь возможность изменять / добавлять роли для пользователей своей компании.Проблема в том, что он создает список всех ролей, в которых они не участвуют, включая Admin.Который явно не хочу.Я ищу способ поместить предложение where в это утверждение.

var colAllRoles = RoleManager.Roles.Select(x => x.Name).ToList();

Ниже приведено все действие, может быть, в действии есть лучшее место для этого?Тем не менее, я попытался вставить в это положение where, и оно мне не понравилось.Кажется, что Select не может быть использован, если используется Where и без Select он вообще не работает.

Спасибо за вашу помощь!

private List<string> RolesUserIsNotIn(string UserName)
{
        // Get roles the user is not in
        var colAllRoles = RoleManager.Roles.Select(x => x.Name).ToList();

        // Go get the roles for an individual
        Models.ApplicationUser user = UserManager.FindByName(UserName);

        // If we could not find the user, throw an exception
        if (user == null)
        {
            throw new Exception("Could not find the User");
        }

        var colRolesForUser = UserManager.GetRoles(user.Id).ToList();
        var colRolesUserInNotIn = (from objRole in colAllRoles
                                   where !colRolesForUser.Contains(objRole)
                                   select objRole).ToList();

        if (colRolesUserInNotIn.Count() == 0)
        {
            colRolesUserInNotIn.Add("No Roles Found");
        }

        return colRolesUserInNotIn;
}

РЕДАКТИРОВАТЬ

Я добавил свой PrivateAndRoles GetUserAndRoles.Это где список заполнен.Я воспользовался советом, чтобы он не попал в RolesUserIsIn, и изменил приведенный ниже код, чтобы он заполнял список без прав администратора.

Строка кода, которая была изменена:

 ViewBag.AddRole = new SelectList(RolesUserIsIn(UserName));

Это пример кода с изменениями:

    private UserAndRolesDTO GetUserAndRoles(string UserName)
    {
        // Go get the User
        Models.ApplicationUser user = UserManager.FindByName(UserName);

        List<UserRoleDTO> colUserRoleDTO =
            (from objRole in UserManager.GetRoles(user.Id)
             select new UserRoleDTO
             {
                 RoleName = objRole,
                 UserName = UserName
             }).ToList();

        if (colUserRoleDTO.Count() == 0)
        {
            colUserRoleDTO.Add(new UserRoleDTO { RoleName = "No Roles Found" });
        }

        var roleList = RolesUserIsNotIn(UserName);
        var roleListWithoutAdmin = roleList.Where(f => f != "Administrator");
        ViewBag.AddRole = new SelectList(roleListWithoutAdmin);

        // Create UserRolesAndPermissionsDTO
        UserAndRolesDTO objUserAndRolesDTO =
            new UserAndRolesDTO
            {
                UserName = UserName,
                ColUserRoleDTO = colUserRoleDTO
            };
        return objUserAndRolesDTO;
    }

1 Ответ

0 голосов
/ 16 декабря 2018

Вы можете выполнить условие where, чтобы исключить элемент роли Admin из списка ролей.

Я бы не стал делать это внутри метода RolesUserIsNotIn.Я бы сделал это вне метода, чтобы этот метод делал только одно, получая роли, в которых нет пользователя.

Сначала вызовите ваш метод, который получит список ролей, в которых нет пользователя. Затемвызовите Where метод для этого, чтобы исключить конкретный элемент.

var roleList = RolesUserIsNotIn("SomeuserName");
//Not exclude Admin
var roleListWithoutAdmin = roleList.Where(f=>f!="Admin");

Переменная roleListWithoutAdmin имеет тип IEnumerable<string>.Если вам нужен список, вы можете вызвать метод ToList() для этого или выражение LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...