分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

NETCore 同步AD域组织和用户

发布时间:2023-09-06 02:16责任编辑:熊小新关键词:暂无标签

BitAdminCore为没有自主开发框架的小团队,提供快速项目搭建及开发能力。

框架演示:http://bit.bitdao.cn

框架源码:https://github.com/chenyinxin/cookiecutter-bitadmin-core


不解释,直接上代码

1 ????????//配置以下四个参数,开放389端口。2 ????????string domainName = "bitdao.cn";3 ????????string domainRoot = "组织单位";4 ????????string domainUser = "user";5 ????????string domainPass = "password";
 ?1 ??public ActionResult Sync() ?2 ????????{ ?3 ????????????try ?4 ????????????{ ?5 ????????????????//连接域 ?6 ????????????????DirectoryEntry domain = new DirectoryEntry(); ?7 ????????????????domain.Path = string.Format("LDAP://{0}", domainName); ?8 ????????????????domain.Username = domainUser; ?9 ????????????????domain.Password = domainPass; 10 ????????????????domain.AuthenticationType = AuthenticationTypes.Secure; 11 ????????????????domain.RefreshCache(); 12 ?13 ????????????????DirectoryEntry entryOU = domain.Children.Find("OU=" + domainRoot); 14 ????????????????DirectorySearcher mySearcher = new DirectorySearcher(entryOU, "(objectclass=organizationalUnit)"); //查询组织单位 15 ????????????????DirectoryEntry root = mySearcher.SearchRoot; ??//查找根OU 16 ?17 ????????????????if (root.Properties.Contains("ou") && root.Properties.Contains("objectGUID")) 18 ????????????????{ 19 ????????????????????string rootOuName = root.Properties["ou"][0].ToString(); 20 ????????????????????byte[] bGUID = root.Properties["objectGUID"][0] as byte[]; 21 ????????????????????Guid id = new Guid(bGUID); 22 ?23 ????????????????????departments.Add(new SysDepartment() { DepartmentId = id, DepartmentCode = id.ToString(), DepartmentName = rootOuName, DepartmentFullName = rootOuName }); 24 ?25 ????????????????????SyncSubOU(root, id); 26 ????????????????} 27 ?28 ????????????????//入库 29 ????????????????foreach (var d in departments) 30 ????????????????{ 31 ????????????????????var department = dbContext.SysDepartment.Find(d.DepartmentId); 32 ????????????????????if (department == null) 33 ????????????????????????dbContext.SysDepartment.Add(d); 34 ????????????????????else 35 ????????????????????{ 36 ????????????????????????department.DepartmentName = d.DepartmentName; 37 ????????????????????????department.DepartmentFullName = d.DepartmentFullName; 38 ????????????????????????department.ParentId = d.ParentId; 39 ????????????????????} 40 ????????????????????dbContext.SaveChanges(); 41 ????????????????} 42 ????????????????foreach (var u in users) 43 ????????????????{ 44 ????????????????????var user = dbContext.SysUser.Find(u.UserId); 45 ????????????????????if (user == null) 46 ????????????????????{ 47 ????????????????????????u.CreateBy = u.UserId; 48 ????????????????????????u.CreateTime = DateTime.Now; 49 ????????????????????????dbContext.SysUser.Add(u); 50 ????????????????????} 51 ????????????????????else 52 ????????????????????{ 53 ????????????????????????user.UserCode = u.UserCode; 54 ????????????????????????user.UserName = u.UserName; 55 ????????????????????????user.DepartmentId = u.DepartmentId; 56 ????????????????????????user.Mobile = u.Mobile; 57 ????????????????????????user.Email = u.Email; 58 ????????????????????????user.UpdateBy = u.UserId; 59 ????????????????????????user.UpdateTime = DateTime.Now; 60 ????????????????????} 61 ????????????????????dbContext.SaveChanges(); 62 ????????????????} 63 ?64 ?65 ????????????????return Json(new { Code = 0, Msg = "同步成功!" }); 66 ????????????} 67 ????????????catch (Exception ex) 68 ????????????{ 69 ????????????????LogHelper.SaveLog(ex); 70 ????????????????return Json(new { Code = 1, Msg = "服务器异常,请联系管理员!" }); 71 ????????????} 72 ????????} 73 ?74 ????????List<SysUser> users = new List<SysUser>(); 75 ????????List<SysDepartment> departments = new List<SysDepartment>(); 76 ?77 ????????private void SyncSubOU(DirectoryEntry entry, Guid parentId) 78 ????????{ 79 ????????????foreach (DirectoryEntry subEntry in entry.Children) 80 ????????????{ 81 ????????????????string entrySchemaClsName = subEntry.SchemaClassName; 82 ?83 ????????????????string[] arr = subEntry.Name.Split(‘=‘); 84 ????????????????string categoryStr = arr[0]; 85 ????????????????string nameStr = arr[1]; 86 ?87 ????????????????byte[] bGUID = subEntry.Properties["objectGUID"][0] as byte[]; 88 ????????????????Guid id = new Guid(bGUID); 89 ?90 ????????????????switch (entrySchemaClsName) 91 ????????????????{ 92 ????????????????????case "organizationalUnit": 93 ????????????????????????departments.Add(new SysDepartment() { DepartmentId = id, ParentId = parentId, DepartmentCode = id.ToString(), DepartmentName = nameStr, DepartmentFullName = nameStr }); 94 ?95 ????????????????????????SyncSubOU(subEntry, id); 96 ????????????????????????break; 97 ????????????????????case "user": 98 ????????????????????????users.Add(new SysUser() 99 ????????????????????????{100 ????????????????????????????UserId = id,101 ????????????????????????????UserCode = subEntry.Properties["samaccountName"][0].ToString(),102 ????????????????????????????DepartmentId = parentId,103 ????????????????????????????UserName = subEntry.Properties["displayName"][0].ToString(),104 ????????????????????????????Email = subEntry.Properties.Contains("mail") ? subEntry.Properties["mail"][0].ToString() : "",105 ????????????????????????????Mobile = subEntry.Properties.Contains("telephoneNumber") ? subEntry.Properties["telephoneNumber"][0].ToString() : ""106 ????????????????????????});107 108 ????????????????????????break;109 ????????????????}110 ????????????}111 ????????}

NETCore 同步AD域组织和用户

原文地址:https://www.cnblogs.com/chenyinxin/p/9715081.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved