我在datarow中应用了循环,我需要检查如果用户角色是admin,我需要应用一些条件。
现在,用户可以拥有多个角色,例如User Smith有3个角色:Admin,Developer和Tester。因此,史密斯条件成真。对Jane而言,她有4个角色:开发人员,测试员,分析师和普通用户,因此对于简,条件变为假(因为她不是管理员)
现在我编写了代码
// filling up the dataTable.
DataTable dtAssignedRoles = (DataTable (Session[GlobalConstants.SESSION_USER_ASSGN_ROLE_DT]);
if (dtAssignedRoles != null && dtAssignedRoles.Rows.Count > 0)
{
foreach (DataRow dr in dtAssignedRoles.Rows)
{
if (dr["OT_ROLE"].ToString().ToUpper().Equals("ADMIN"))
{
// apply condition for admin here!
}
}
}
// Condition that would execute for Jane
if (strICol.Equals("N"))
{
e.Row.Cells[0].Text = string.Empty;
e.Row.Cells[0].Controls.Clear();
Image imgIColumnDesc = new Image();
imgIColumnDesc.ImageUrl = "~/Images/blackcircle.png";
e.Row.Cells[0].Controls.Add(imgIColumnDesc);
}
问题:对于史密斯而言,条件失败,因为虽然他是管理员,但他也是开发人员和测试人员。因此应用了2个条件;一个用于管理员,另一个用于非管理员(dev + tester)
因此我想,我需要检查所有行,如果管理员有一个角色,则应该满足条件。但我不知道怎么做?
请指导。感谢
答案 0 :(得分:1)
如果在为管理员应用条件后添加语句break;
,则会跳出循环并转到该过程的下一步。
答案 1 :(得分:1)
您可以使用此辅助函数来确定用户是否具有特定角色...
public bool hasRole(string role, DataTable dtAssignedRoles)
{
if (dtAssignedRoles != null && dtAssignedRoles.Rows.Count > 0)
{
foreach (DataRow dr in dtAssignedRoles.Rows)
{
if (dr["OT_ROLE"].ToString().ToUpper().Equals(role))
{
return true;
}
}
}
return false;
}
编辑:或与Linq一起
public bool hasRole(string role, DataTable dtAssignedRoles)
{
return dtAssignedRoles.AsEnumerable().Any(a => a["OT_ROLE"].ToString().ToUpper().Equals(role.ToUpper()));
}
然后使用......
if(hasRole("ADMIN",dtAssignedRoles))
{
//DO stuff
}
else if (hasRole("TESTER", dtAssignedRoles))
{
//Do Other Stuff
}