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
;
}
查看全文
相关阅读:
JQuery判断CheckBox是否选中
Ghost下的gho镜像分区工具
JQuery提示$(...).on is not a function解决方法
Jetty错误: badMessage: java.lang.IllegalStateException: too much data after closed for HttpChannelOverHttp@472adad9{r=2,c=false,a=IDLE,uri=}
Linux下使用Shell过滤重复文本(转)
JQuery给动态HTML绑定事件
Chrome插件在页面上直接绑定JavaScript事件提示Refused to execute inline event handler because it violates the following Co
解决——》java.lang.IllegalArgumentException: Body parameter 0 was null
qhclass
java类uuid源码分析
原文地址:https://www.cnblogs.com/zyk/p/59707.html
最新文章
css中单位px和em,rem的区别
console调试技巧
jwt netcore mvc Api
Orleans是用于使用.NET构建分布式应用程序的跨平台框架
使用 Topshelf 组件和Quartz.net 库调度创建 Windows 服务
假如我是一个浏览器
Asp.NET Core Api项目集成NSwag
Linux下#!/usr/bin/env bash和#!/usr/bin/bash、#!/bin/bash的比较
Linux下数组遍历
Linux下date常用格式化输出
热门文章
Linux下的echo输出换行符
Ubuntu 16.04下Shell脚本中使用数组提示:Syntax error: "(" unexpected
Linux下CURL设置请求超时时间
Maven多模块项目新建技巧-解决公共项目install之后可以在单独模块中直接编译
Maven多模块项目单独编译子模块项目时报错:Failed to execute goal on project/Could not resolve dependencies for project
Java静态static工具类线程安全问题研究
Linux批量管理工具Ansible
Linux运维监控软件Zabbix和Nagios的初探
Linux下Shell脚本替换换行符(转)
JavaScript对JSON数据进行排序
Copyright © 2011-2022 走看看