zoukankan
html css js c++ java
基于深度优先的递归判断域用户是否是某个组的成员
基于深度优先的递归判断域用户是否是某个组的成员
引用System.DirectoryServices
并导入名称空间
using
System.DirectoryServices;
功能:判断域用户(登录名)是否是某个域安全组的成员,域用户可能属于多个组,并且所属的组可能又属于多个组,所以需要递归调用.
private
DirectoryEntry entry
=
new
DirectoryEntry(
"
LDAP://domain
"
,
@"
domain\username
"
,
"
password
"
);
private
bool
UserisGroupMember(
string
UserLogin,
string
RoleName)
{
DirectorySearcher mySearcher
=
new
DirectorySearcher(entry);
mySearcher.Filter
=
string
.Format (
"
(&(objectClass=user)(sAMAccountName={0}))
"
,UserLogin );
mySearcher.PropertiesToLoad.Add (
"
memberof
"
);
SearchResult mysr
=
mySearcher.FindOne();
if
(mysr.Properties .Count
>
1
)
//
返回两个属性,一个是内置的adspath,另一个是PropertiesToLoad加载的
{
string
[] memberof
=
new
string
[mysr.Properties[
"
memberof
"
].Count ];
int
i
=
0
;
foreach
( Object myColl
in
mysr.Properties[
"
memberof
"
])
{
memberof[i]
=
myColl.ToString ().Substring (
3
,myColl.ToString ().IndexOf(
"
,
"
)
-
3
);
if
(memberof[i]
==
RoleName)
return
true
;
i
++
;
}//其实这一层循环是广度优先算法,因为考虑到一个人直接属于某个安全组的可能性要大一些,这样做效率更高.如果把下面这个循环放到上面的if的esle中,就是完全的深度优先了.
foreach
(
string
GroupName
in
memberof)
if
(MemberisGroupMember(GroupName,RoleName))
return
true
;
}
return
false
;
}
private
bool
MemberisGroupMember(
string
GroupName,
string
RoleName)
{
DirectorySearcher mySearcher
=
new
DirectorySearcher(entry);
mySearcher.Filter
=
string
.Format (
"
(&(objectClass=group)(CN={0}))
"
,GroupName );
mySearcher.PropertiesToLoad.Add (
"
memberof
"
);
SearchResult mysr
=
mySearcher.FindOne();
string
memberof;
if
(mysr.Properties.Count
>
1
)
//
返回两个属性,一个是内置的adspath,另一个是PropertiesToLoad加载的
{
foreach
( Object myColl
in
mysr.Properties[
"
memberof
"
])
{
memberof
=
myColl.ToString ().Substring (
3
,myColl.ToString ().IndexOf(
"
,
"
)
-
3
);
if
(memberof
==
RoleName)
return
true
;
else
if
(MemberisGroupMember(memberof,RoleName))
return
true
;
}
}
return
false
;
}
查看全文
相关阅读:
win10与ubuntu下演示运行.net core rc2 1.0.0.3002702程序
win10系统iis下部署搭建https (ssl/tls)本地测试环境
HTTP 错误 500.19
win8.1安装Team Function Server 2013
WCF在编译出现 “错误 3 命令“时解决
EXCEL中,在其中列 前面or后面加一个“元”字的技巧
职业经理感言一
工作小应用:EXCEL查找两列重复数据
C#设置与获取目录权限(.net控制ACL)
WPF中窗口控件的跨线程调用
原文地址:https://www.cnblogs.com/zyk/p/59707.html
最新文章
Received fatal alert: protocol_version javax.net.ssl.SSLException: Received 已解决(讨巧)
可转债博弈
投资心得
柯罗尼新扬子(上海)投资管理咨询有限公司(特朗普背后财团之一)
聊天金句
为何大量网站不能抓取?爬虫突破封禁的6种常见方法
常见异常集合
人生第一个java脚本-jsoup实例
poi Excel 常错集锦
x264 build for iOS
热门文章
寻找一个长度为3n的数组中出现次数超过n的元素
sign3 neon
add_clip neon
编译器为简单分支语句生成的代码质量很高
clip3 操作的内联函数
.net项目引用C++ 动态链接库.dll
asp.net webapi 序列化为xml 时实体属性增加<![CDATA[]]>防止特殊字符
ubuntu16.4下用jexus部署asp.net core rtm
win10下iis部署asp.net core rtm
win10下vs2015创建asp,net core项目并运行在ubuntu14.04下
Copyright © 2011-2022 走看看