Redmine 导入AD用户
- 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();
}