Redmine 匯入AD使用者

來源:互聯網
上載者:User
  • 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();
}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.