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

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

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


不解释,直接上代码

         //配置以下四个参数,开放389端口。
string domainName = "bitdao.cn";
string domainRoot = "组织单位";
string domainUser = "user";
string domainPass = "password";
   public ActionResult Sync()
{
try
{
//连接域
DirectoryEntry domain = new DirectoryEntry();
domain.Path = string.Format("LDAP://{0}", domainName);
domain.Username = domainUser;
domain.Password = domainPass;
domain.AuthenticationType = AuthenticationTypes.Secure;
domain.RefreshCache(); DirectoryEntry entryOU = domain.Children.Find("OU=" + domainRoot);
DirectorySearcher mySearcher = new DirectorySearcher(entryOU, "(objectclass=organizationalUnit)"); //查询组织单位
DirectoryEntry root = mySearcher.SearchRoot; //查找根OU if (root.Properties.Contains("ou") && root.Properties.Contains("objectGUID"))
{
string rootOuName = root.Properties["ou"][].ToString();
byte[] bGUID = root.Properties["objectGUID"][] as byte[];
Guid id = new Guid(bGUID); departments.Add(new SysDepartment() { DepartmentId = id, DepartmentCode = id.ToString(), DepartmentName = rootOuName, DepartmentFullName = rootOuName }); SyncSubOU(root, id);
} //入库
foreach (var d in departments)
{
var department = dbContext.SysDepartment.Find(d.DepartmentId);
if (department == null)
dbContext.SysDepartment.Add(d);
else
{
department.DepartmentName = d.DepartmentName;
department.DepartmentFullName = d.DepartmentFullName;
department.ParentId = d.ParentId;
}
dbContext.SaveChanges();
}
foreach (var u in users)
{
var user = dbContext.SysUser.Find(u.UserId);
if (user == null)
{
u.CreateBy = u.UserId;
u.CreateTime = DateTime.Now;
dbContext.SysUser.Add(u);
}
else
{
user.UserCode = u.UserCode;
user.UserName = u.UserName;
user.DepartmentId = u.DepartmentId;
user.Mobile = u.Mobile;
user.Email = u.Email;
user.UpdateBy = u.UserId;
user.UpdateTime = DateTime.Now;
}
dbContext.SaveChanges();
} return Json(new { Code = , Msg = "同步成功!" });
}
catch (Exception ex)
{
LogHelper.SaveLog(ex);
return Json(new { Code = , Msg = "服务器异常,请联系管理员!" });
}
} List<SysUser> users = new List<SysUser>();
List<SysDepartment> departments = new List<SysDepartment>(); private void SyncSubOU(DirectoryEntry entry, Guid parentId)
{
foreach (DirectoryEntry subEntry in entry.Children)
{
string entrySchemaClsName = subEntry.SchemaClassName; string[] arr = subEntry.Name.Split('=');
string categoryStr = arr[];
string nameStr = arr[]; byte[] bGUID = subEntry.Properties["objectGUID"][] as byte[];
Guid id = new Guid(bGUID); switch (entrySchemaClsName)
{
case "organizationalUnit":
departments.Add(new SysDepartment() { DepartmentId = id, ParentId = parentId, DepartmentCode = id.ToString(), DepartmentName = nameStr, DepartmentFullName = nameStr }); SyncSubOU(subEntry, id);
break;
case "user":
users.Add(new SysUser()
{
UserId = id,
UserCode = subEntry.Properties["samaccountName"][].ToString(),
DepartmentId = parentId,
UserName = subEntry.Properties["displayName"][].ToString(),
Email = subEntry.Properties.Contains("mail") ? subEntry.Properties["mail"][].ToString() : "",
Mobile = subEntry.Properties.Contains("telephoneNumber") ? subEntry.Properties["telephoneNumber"][].ToString() : ""
}); break;
}
}
}

NETCore 同步AD域组织和用户的更多相关文章

  1. NETCore调用AD域验证

    一.添加引用 System.DirectoryServices System.DirectoryServices.AccountManagement 二.验证代码 声明域 string domainN ...

  2. JAVA 通过LDAP获取AD域用户及组织信息

    因为工作需求近期做过一个从客户AD域获取数据实现单点登录的功能,在此整理分享. 前提:用户可能有很多系统的情况下,为了方便账号的统一管理使用AD域验证登录,所以不需要我们的系统登录,就需要获取用户的A ...

  3. SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)

    由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...

  4. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  5. java集成微软的ad域,实现单点登录

    1.ad域介绍: windos server 2008R2服务器下的ad域,见下图(我是在虚拟机安装到windos server) 2.连接ad域代码:(里面代码自行修改) public Result ...

  6. java修改AD域用户密码使用SSL连接方式

    正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...

  7. gitlab用户登录与AD域用户集成

    ---恢复内容开始--- 编辑gitlab.rb文件 sudo vi /etc/gitlab/gitlab.rb 下图是我编辑的内容示例(仅供参考): 编辑以下内容: gitlab_rails['ld ...

  8. 配置Windows server dhcp与AD域对接并使用Win1创的用户登录Win2

    创建两台windows_server_2012 创建步骤链接(https://www.cnblogs.com/zhengyan6/p/16338084.html) 注意:所有虚拟机都要在同意网段 配置 ...

  9. 如何查看/统计当前AD域控制器的活动用户?

    最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...

随机推荐

  1. C#实现图片文件到数据流再到图片文件的转换

    //----引入必要的命名空间using System.IO;using System.Drawing.Imaging; //----代码部分----// private byte[] photo;/ ...

  2. 《C语言基础日常笔记》

    1. 类型转换-----------------20130902 a, 浮点数(包括单精度与双精度)赋值给整型变量时,舍弃浮点数的小数部分,直接将其整数部分存放在整型变量里. b, 整型变量赋值给浮点 ...

  3. javascript数组操作(创建、元素删除、数组的拷贝)

    这篇文章主要介绍了javascript数组操作,包括创建.元素的访问.元素删除.数组的拷贝等操作,还有其它示例,需要的朋友可以参考下 1.数组的创建 复制代码 代码如下: var arrayObj = ...

  4. CTC Loss原理

    https://blog.csdn.net/left_think/article/details/76370453 1. 背景介绍  在传统的语音识别的模型中,我们对语音模型进行训练之前,往往都要将文 ...

  5. vs2012

    https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=36020

  6. android模拟按键问题总结[使用IWindowManager.injectKeyEvent方法](转)

    http://blog.csdn.net/xudongdong99/article/details/8857173 Android上面TreeView效果 http://blog.csdn.net/g ...

  7. redis centos 上以 tar.gz 安装redis

    1.下载安装文件#wget http://download.redis.io/releases/redis-3.2.3.tar.gz 2.删除文件 rm -rf /usr/local/redisrm ...

  8. 服务器上创建git仓库

    1. 在服务器上 su - git ,切换用户 2. 创建一个目录    mkdir test.git ,请注意带上 .git 扩展 3. 切换进入此目录,git init --bare  ,初始化裸 ...

  9. 5 Django-2 的路由层 (URLconf)

    URL 配置 (URLconf) 就像 Django 所支撑网站的目录.它的本质是 URL 与要为该 URL 调用的视图函数之间的映射表:你就是以这种方式告诉 Django,对于客户端发来的某个 UR ...

  10. .NET基础 (10)流和序列化

    流和序列化1 什么是流,.NET中有哪些常见的流2 如何使用压缩流3 Serializable特性有何作用4 .NET提供了哪几种可进行序列化操作的类型5 如何自定义序列化和反序列化的过程 流和序列化 ...