惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
The GitHub Blog
The GitHub Blog
小众软件
小众软件
美团技术团队
博客园 - 司徒正美
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Docker
J
Java Code Geeks
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
V
V2EX
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog

博客园 - 家中慢步

AKShare 高频请求东财数据接口的异常问题及解决方案 quartz 2.2.1 jdbc 连接池参数配置 httpclient发送request请求时设置header和timeout redmine 安装roadmap 插件 centos 下自动备份redmine 数据 centos 5.6 安装redmine 步骤 解决mysql 写入中文读出乱码的问题 SVN的Redmine集成插件 Quartz.net Tutorial Lesson 2 RedMine 邮件通知配置 teamlab与redmine试用对比报告 Redmine集成LDAP认证 Redmine 初体验 jqgrid 属性说明 [原创]sql server inner join 效率测试 为sql server客户端连接添加别名 [转载]sql server T-SQL 区分字符串大小写 的两种方法 [转载]sql server 常用存储过程 Quartz.net Tutorial Lesson 1
Redmine 导入AD用户
家中慢步 · 2011-10-27 · via 博客园 - 家中慢步
  • Redmine集成LDAP认证的前提是需要在系统中建立域用户,为此实现了一个从Ad中获取用户并初始化到Redmine的功能。
  • 功能设计  

  • AD账户读取

  定义Model

  public class ADUserModel
{
public string UserId { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
}

  查询AD对象

public static List<ADUserModel> GetAllDomainUserInfo()
{
List<ADUserModel> infolist = new List<ADUserModel>();

string[] properties = new string[] { "fullname" };
System.DirectoryServices.DirectoryEntry adRoot = new System.DirectoryServices.DirectoryEntry("LDAP://" + PrimaryDomainName, DomainUser, DomainPassword, AuthenticationTypes.Secure);
System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(adRoot);
mySearcher.Filter = "(objectClass=*)";
mySearcher.PropertiesToLoad.Clear();
SearchResultCollection searchResultCollection = null;
try
{
searchResultCollection = mySearcher.FindAll();
infolist = VisitSearchResultCollection(searchResultCollection);
}
catch
{
// 处理异常
}
return infolist;
}

  将AD对象转换为Model

 private static List<ADUserModel> VisitSearchResultCollection(SearchResultCollection resultCollection)
{
List<ADUserModel> domainlist = new List<ADUserModel>();
StringBuilder html = new StringBuilder();
foreach (SearchResult result in resultCollection)
{
string userName = string.Empty;
string displayName = string.Empty;
string distinguishedName = string.Empty;
ADUserModel info = new ADUserModel();
if (result.Properties.Contains("samaccountname"))
{
ResultPropertyValueCollection resultValue = result.Properties["samaccountname"];
if (resultValue != null && resultValue.Count > 0 && resultValue[0] != null)
{
info.UserId = resultValue[0].ToString();
info.Email = info.UserId + "@aa.com";
}
}

if (result.Properties.Contains("mail"))
{
ResultPropertyValueCollection resultValue = result.Properties["mail"];
if (resultValue != null && resultValue.Count > 0 && resultValue[0] != null)
{
info.Email = info.UserId + "@aa.com";
}
}

if (result.Properties.Contains("displayname"))
{
ResultPropertyValueCollection resultValue = result.Properties["displayname"];
if (resultValue != null && resultValue.Count > 0 && resultValue[0] != null)
{
info.UserName = resultValue[0].ToString();
}
}

if (!string.IsNullOrEmpty(info.UserId))
{
domainlist.Add(info);
}
}
return domainlist;
}

  • Redmine数据写入

  using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.AppSettings["redmineconn"]))
{
conn.Open();
using (MySqlTransaction tran = conn.BeginTransaction() as MySqlTransaction)
{
try
{
foreach (ADUserModel adUser in adUserList)
{
RedUserDal.Instance.InsertUser(adUser, conn, tran);
}
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
Logger.Error(ex.Message);
}
}
conn.Close();
conn.Dispose();
}