zoukankan      html  css  js  c++  java
  • 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();
    }


  • 相关阅读:
    iOS开发之使用 infer静态代码扫描工具
    iOS 组件化开发之使用CocoaPod制作自己的远程私有库
    WKWebView 使用的坑
    iOS 自动化打包发布(Fastlane+ Jenkins+蒲公英)
    Flutter 开发入门实践
    【读书笔记】--《编写高质量iOS与OS X代码的52个有效方法》
    iOS 10.3+ 动态修改 App 图标
    ubuntu16.04 安装 caffe cuda 相关流程
    ubuntu 休眠后窗口边缘出现花边的解决方案
    c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
  • 原文地址:https://www.cnblogs.com/snowlove67/p/2226779.html
Copyright © 2011-2022 走看看