我有一个控制器操作,必须在admin部分中更改/添加角色。我在用户部分使用了相同的代码来使用公司管理员,以便能够为其公司用户更改/添加角色。问题在于它会列出所有不属于他们的角色,包括Admin。显然我不想要。我正在寻找一种在此语句中放置where子句的方法。
var colAllRoles = RoleManager.Roles.Select(x => x.Name).ToList();
下面是整个Action,也许在Action中有一个更好的位置可以执行此操作?但是,我尝试在其中放置where子句,但它不喜欢它。如果使用“位置”,则似乎无法使用“选择”功能,而没有“选择”功能则根本无法使用。
感谢您的帮助!
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;
}
编辑
我已经添加了我的私人UserAndRoles GetUserAndRoles。这是填充列表的地方。我已经采取了将其排除在RolesUserIsIn中的建议,并修改了以下代码,以便在不使用Admin的情况下填充列表。
已更改的代码行:
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;
}
答案 0 :(得分:0)
您可以执行where条件,将Admin
角色项从角色列表中排除。
我不会在RolesUserIsNotIn
方法中这样做。我会在方法之外进行操作,以便该方法仅做一件事,获得用户不属于的角色。
首先调用您的方法,该方法将获得用户不属于的角色列表。然后在该方法上调用Where
方法以排除特定项目。
var roleList = RolesUserIsNotIn("SomeuserName");
//Not exclude Admin
var roleListWithoutAdmin = roleList.Where(f=>f!="Admin");
变量roleListWithoutAdmin
的类型为IEnumerable<string>
。如果需要列表,可以在该列表或LINQ表达式上调用ToList()
方法。