您的位置:首页 > 其它

Redmine 导入AD用户

2011-10-27 16:44 99 查看
Redmine集成LDAP认证的前提是需要在系统中建立域用户,为此实现了一个从Ad中获取用户并初始化到Redmine的功能。

[b]功能设计[/b][b]  [/b]



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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: