У меня есть действие контроллера, которое я должен изменить / добавить роли в разделе администратора.Я использовал этот же код в разделе пользователей для использования администратором компании, чтобы иметь возможность изменять / добавлять роли для пользователей своей компании.Проблема в том, что он создает список всех ролей, в которых они не участвуют, включая 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;
}