我正在使用下面的C#代码检查用户是否属于必需的域成员组。
传递的用户名是3个成员组的一部分,但是代码将返回第一个域组成员名并从for循环中退出。请帮助我为用户获取域组的完整列表。
<html>
<head>
<title>Slots</title>
</head>
<body>
<h1>Test your luck! Click the SPIN button</h1>
<div>
<button value="Spin" onclick="spinslots();"> SPIN </button>
</div>
<div>
<div class="SlotDiv" id="div_1">
<img id="slot_1" src="images/lemon.jpg" />
</div>
<div class="SlotDiv" id="div_2">
<img id="slot_2" src="images/cherry.jpg" />
</div>
<div class="SlotDiv" id="div_3">
<img id="slot_3" src="images/bar.jpg" />
</div>
</div>
<p>Credits: <span class="OutputBox" type="numeric" id="Credits" size="10">20</span></p>
</body>
</html>
答案 0 :(得分:0)
如果我弄错了,请告诉我。
我只能看到一个目的,要退还布尔?
顺便说一句,即使不是那样,请尝试删除break;
bool bReturn = false;
string sDomainName = System.Environment.UserDomainName;
using (PrincipalContext oContext = new PrincipalContext(ContextType.Domain, sDomainName))
{
if (oContext.ValidateCredentials(sUserName, sPassword))
{
using (PrincipalSearcher oSearcher = new PrincipalSearcher(new UserPrincipal(oContext)))
{
oSearcher.QueryFilter.SamAccountName = sUserName;
Principal oPrincipal = oSearcher.FindOne();
foreach (Principal oPrin in oPrincipal.GetGroups())
{
if (oPrin.Name.Trim().ToString().Equals(sGroupName))
{
//your stuff here (assign vars, values etc)
bReturn = true; // <--
}
}
}
}
因为根据您使用的逻辑,如果满足一个条件,它将停止循环。
答案 1 :(得分:0)
使用IsMemberOf
方法来代替循环:
bReturn = oPrincipal.IsMemberOf(oContext, IdentityType.Name, sGroupName);
这将可能为您工作。但是请记住,只有在用户的memberOf
属性中列出了该组时,此方法(和您的循环方法)才有效。如果:
然后它将不起作用。
我在我在自己的网站上写过的一篇文章中谈到了这一点:Find out if one user is a member of a group
答案 2 :(得分:0)
C#代码无法获取特权问题的AD成员详细信息。
我已经使用net group "<GroupName>"
来获取用户列表作为组的一部分,然后在列表中检查了所需的用户。
验证用户是必需组的成员是另一种选择。