基于深度优先的递归判断域用户是否是某个组的成员

None.gif 基于深度优先的递归判断域用户是否是某个组的成员
None.gif引用System.DirectoryServices
None.gif并导入名称空间
None.gif
using  System.DirectoryServices;
None.gif功能:判断域用户(登录名)是否是某个域安全组的成员,域用户可能属于多个组,并且所属的组可能又属于多个组,所以需要递归调用.
None.gif
None.gif
private  DirectoryEntry entry  =   new  DirectoryEntry( " LDAP://domain " , @" domain\username " , " password " );
None.gif
private   bool  UserisGroupMember( string  UserLogin, string  RoleName)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {    
InBlock.gif                        
InBlock.gif            DirectorySearcher mySearcher 
=   new  DirectorySearcher(entry);
InBlock.gif            mySearcher.Filter
= string .Format ( " (&(objectClass=user)(sAMAccountName={0})) " ,UserLogin );
InBlock.gif            mySearcher.PropertiesToLoad.Add (
" memberof " );
InBlock.gif            SearchResult mysr
= mySearcher.FindOne();            
InBlock.gif
InBlock.gif            
if  (mysr.Properties .Count > 1 // 返回两个属性,一个是内置的adspath,另一个是PropertiesToLoad加载的
ExpandedSubBlockStart.gifContractedSubBlock.gif
             dot.gif {    
InBlock.gif                
string  [] memberof = new   string  [mysr.Properties[ " memberof " ].Count ];
InBlock.gif                
int  i = 0 ;
InBlock.gif                
foreach ( Object myColl  in  mysr.Properties[ " memberof " ])
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif {
InBlock.gif                    memberof[i]
= myColl.ToString ().Substring ( 3 ,myColl.ToString ().IndexOf( " , " ) - 3 );                    
InBlock.gif                    
if  (memberof[i] == RoleName)
InBlock.gif                        
return   true ;
InBlock.gif                    i
++ ;
ExpandedSubBlockEnd.gif                }//其实这一层循环是广度优先算法,因为考虑到一个人直接属于某个安全组的可能性要大一些,这样做效率更高.如果把下面这个循环放到上面的if的esle中,就是完全的深度优先了.

InBlock.gif                                    
InBlock.gif                
foreach  ( string  GroupName  in  memberof)                
InBlock.gif                    
if  (MemberisGroupMember(GroupName,RoleName))
InBlock.gif                        
return   true ;    
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return   false ;
ExpandedBlockEnd.gif        }

None.gif
None.gif        
private   bool  MemberisGroupMember( string  GroupName, string  RoleName)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            DirectorySearcher mySearcher 
=   new  DirectorySearcher(entry);
InBlock.gif            mySearcher.Filter
= string .Format ( " (&(objectClass=group)(CN={0})) " ,GroupName );
InBlock.gif            mySearcher.PropertiesToLoad.Add (
" memberof " );
InBlock.gif            SearchResult mysr
= mySearcher.FindOne();
InBlock.gif            
string  memberof;
InBlock.gif
InBlock.gif            
if  (mysr.Properties.Count  > 1 ) // 返回两个属性,一个是内置的adspath,另一个是PropertiesToLoad加载的
ExpandedSubBlockStart.gifContractedSubBlock.gif
             dot.gif {
InBlock.gif                
foreach ( Object myColl  in  mysr.Properties[ " memberof " ])
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif {
InBlock.gif                    memberof
= myColl.ToString ().Substring ( 3 ,myColl.ToString ().IndexOf( " , " ) - 3 );                    
InBlock.gif                    
if  (memberof == RoleName)
InBlock.gif                        
return   true ;                                            
InBlock.gif                    
else
InBlock.gif                        
if  (MemberisGroupMember(memberof,RoleName))
InBlock.gif                        
return   true ;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
return   false ;
ExpandedBlockEnd.gif        }

None.gif

转载于:https://www.cnblogs.com/zyk/archive/2004/11/02/59707.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值