.Net读取AD中的用户并使用BootstrapTable的ajax分页

JS:

<script type="text/javascript" src="js/jquery/jquery-2.1.4.min.js"></script>
<link rel="stylesheet" href="myPlugin/bootstrap/css/bootstrap.min.css" />
<script type="text/javascript" src="myPlugin/bootstrap/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="myPlugin/bootstrap-table/bootstrap-table.min.css" />
<script type="text/javascript" src="myPlugin/bootstrap-table/bootstrap-table.min.js"></script>
<script type="text/javascript" src="myPlugin/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
<script type="text/javascript">
    $(function () {
        GetTable();
    })

    //加载表格数据
    function GetTable() {
        $('#table').bootstrapTable({
            method: 'get',
            url: 'myContacts.ashx',
            cache: false,
            striped: true,
            pagination: true,
            dataType: "json",
            pageList: [10, 20, 50, 100, 200],
            pageSize: 10,
            pageNumber: 1,
            search: true,
            sidePagination: 'server',
            showColumns: true,
            minimumCountColumns: 2,
            clickToSelect: true,
            showToggle: true,
            columns: [{
                field: 'Useraccount',
                title: '账号',
                visible: false,
                sortable: true
            },
            {
                field: 'Username',
                title: '姓名',
                sortable: true
            }, {
                field: 'Userdepartment',
                title: '部门',
                sortable: true
            }, {
                field: 'Usertitle',
                title: '职务',
                sortable: true
            }, {
                field: 'Usermobile',
                title: '手机',
                sortable: true
            }, {
                field: 'UsertelephoneNumber',
                title: '电话',
                sortable: true
            }, {
                field: 'Usermail',
                title: '邮箱',
                sortable: true
            }, {
                field: 'Userstate',
                title: '状态',
                visible: false,
                sortable: true
            }],
        });
    }

    //刷新
    function EnterpriseContactsRefresh() {
        $('#table').bootstrapTable('refresh', {
            url: 'myContacts.ashx',
            query: { foo: 'r' }
        });
    }

</script>


HTML:

<div id="custom-toolbar" style="float: right; margin-top: 9px;">
    <button name="refresh" title="刷新" class="btn btn-default" type="button" οnclick="EnterpriseContactsRefresh()">
        <i class="glyphicon glyphicon-refresh icon-refresh"></i>
    </button>
</div>
<table id="table"></table>


myContacts.ashx:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web;

namespace Test
{
    /// <summary>
    /// myContacts的摘要说明
    /// </summary>
    public class myContacts : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            var json = CommonMethod.GetContacts(context);
            context.Response.ContentType = "application/json";
            context.Response.Write(json);
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }
}


CommonMethod.cs

using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Script.Serialization;

namespace Test
{
    /// <summary>
    /// 通讯录用户属性
    /// </summary>
    public class ColProperty
    {
        /// <summary>
        /// 账号
        /// </summary>
        public string Useraccount { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Username { get; set; }
        /// <summary>
        /// 部门
        /// </summary>
        public string Userdepartment { get; set; }
        /// <summary>
        /// 职位
        /// </summary>
        public string Usertitle { get; set; }
        /// <summary>
        /// 手机
        /// </summary>
        public string Usermobile { get; set; }
        /// <summary>
        /// 座机
        /// </summary>
        public string UsertelephoneNumber { get; set; }
        /// <summary>
        /// 邮箱
        /// </summary>
        public string Usermail { get; set; }
        /// <summary>
        /// 状态
        /// </summary>
        public string Userstate { get; set; }
    }

    /// <summary>
    /// 要返回的所有通讯录用户对象
    /// </summary>
    public class JsonObj
    {
        public List<ColProperty> rows { get; set; }
        public int total { get; set; }
    }

    public class CommonMethod
    {
        #region 企业通讯录
        /// <summary>
        /// 储存所有用户对象
        /// </summary>
        public static List<ColProperty> ColArray = new List<ColProperty>();

        /// <summary>
        /// 获取企业通讯录
        /// </summary>
        /// <param name="context">HttpContext</param>
        /// <returns>Json格式用户对象</returns>
        public static string GetContacts(HttpContext context)
        {
            var json = "";
            try
            {
                string order = context.Request.QueryString["order"];// asc desc
                string limit = context.Request.QueryString["limit"];//每页显示数量
                string offset = context.Request.QueryString["offset"];//从第几项开始
                string search = context.Request.QueryString["search"];//搜索关键字
                string sort = context.Request.QueryString["sort"];//排序的字段
                string foo = context.Request.QueryString["foo"];//刷新
                if (ColArray.Count == 0 || (foo != null && foo == "r"))//需要从AD中读取数据
                {
                    ColArray = new List<ColProperty>();
                    GetUserFromAD(ADHelper.deRoot.Children);//获得AD里的所有用户
                }
                json = GetAllUser(order, limit, offset, search, sort);
            }
            catch (Exception)
            {
                json = "[]";
                throw;
            }
            return json;
        }

        /// <summary>
        /// 获取所有用户
        /// </summary>
        /// <param name="order">正序/倒序</param>
        /// <param name="limit">每页显示多少个</param>
        /// <param name="offset">从第几个开始</param>
        /// <param name="search">搜索关键字</param>
        /// <param name="sort">排序字段</param>
        /// <returns></returns>
        private static string GetAllUser(string order, string limit, string offset, string search, string sort)
        {
            int i_limit = int.Parse(limit);
            int i_offset = int.Parse(offset);
            int count = ColArray.Count;
            List<ColProperty> UserArray = ColArray;
            if (search != null && search != "")
            {
                UserArray = ColArray.FindAll(delegate(ColProperty cp)//根据关键字搜索筛选
                {
                    return cp.Useraccount.Contains(search) || cp.Username.Contains(search) || cp.Userdepartment.Contains(search) || cp.Usertitle.Contains(search) || cp.Usermobile.Contains(search) || cp.UsertelephoneNumber.Contains(search) || cp.Usermail.Contains(search) || cp.Userstate.Contains(search);
                });
                count = UserArray.Count;
            }
            if (i_limit + i_offset > UserArray.Count)
            {
                i_limit = UserArray.Count - i_offset;
            }
            UserArray = UserArray.GetRange(i_offset, i_limit);//根据页数筛选
            if (sort != null)//根据某个字段排序
            {
                UserArray = SortArray(order, sort, UserArray);
            }
            JsonObj obj = new JsonObj() { rows = UserArray, total = count };
            JavaScriptSerializer jss = new JavaScriptSerializer();
            var json = jss.Serialize(obj);
            return json;
        }

        /// <summary>
        /// 遍历DirectoryEntry获取所有用户
        /// </summary>
        /// <param name="des">DirectoryEntries</param>
        public static void GetUserFromAD(DirectoryEntries des)
        {
            foreach (DirectoryEntry deUser in des)
            {
                if (deUser.Properties["cn"].Value != null)
                {
                    string Useraccount = "";
                    string Username = "";
                    string Userdepartment = "";
                    string Usertitle = "";
                    string Usermobile = "";
                    string UsertelephoneNumber = "";
                    string Usermail = "";
                    string Userstate = "禁用";
                    Useraccount = deUser.Properties["sAMAccountName"].Value.ToString();
                    Username = deUser.Properties["cn"].Value.ToString();
                    if (deUser.Properties["department"].Value != null)
                    {
                        Userdepartment = deUser.Properties["department"].Value.ToString();
                    }
                    if (deUser.Properties["title"].Value != null)
                    {
                        Usertitle = deUser.Properties["title"].Value.ToString();
                    }
                    if (deUser.Properties["mobile"].Value != null)
                    {
                        Usermobile = deUser.Properties["mobile"].Value.ToString();
                    }
                    if (deUser.Properties["telephoneNumber"].Value != null)
                    {
                        UsertelephoneNumber = deUser.Properties["telephoneNumber"].Value.ToString();
                    }
                    if (deUser.Properties["mail"].Value != null)
                    {
                        Usermail = deUser.Properties["mail"].Value.ToString();
                    }
                    if (deUser.Properties["userAccountControl"].Value.ToString() == "512")
                    {
                        Userstate = "启用";
                    }
                    ColProperty cp = new ColProperty() { Useraccount = Useraccount, Username = Username, Userdepartment = Userdepartment, Usertitle = Usertitle, Usermobile = Usermobile, UsertelephoneNumber = UsertelephoneNumber, Usermail = Usermail, Userstate = Userstate };
                    if (!ColArray.Contains(cp))
                    {
                        ColArray.Add(cp);
                    }
                }
                if (deUser.Children != null)
                {
                    GetUserFromAD(deUser.Children);
                }
            }
        }

        /// <summary>
        /// 对List进行排序
        /// </summary>
        /// <param name="order">正序/倒序</param>
        /// <param name="sort">排序字段</param>
        /// <param name="UserArray">List</param>
        /// <returns>List</returns>
        private static List<ColProperty> SortArray(string order, string sort, List<ColProperty> UserArray)
        {
            if (order == "asc")
            {
                switch (sort)
                {
                    case "Useraccount":
                        UserArray = UserArray.OrderBy(cp => cp.Useraccount).ToList<ColProperty>();
                        break;
                    case "Username":
                        UserArray = UserArray.OrderBy(cp => cp.Username).ToList<ColProperty>();
                        break;
                    case "Userdepartment":
                        UserArray = UserArray.OrderBy(cp => cp.Userdepartment).ToList<ColProperty>();
                        break;
                    case "Usertitle":
                        UserArray = UserArray.OrderBy(cp => cp.Usertitle).ToList<ColProperty>();
                        break;
                    case "Usermobile":
                        UserArray = UserArray.OrderBy(cp => cp.Usermobile).ToList<ColProperty>();
                        break;
                    case "UsertelephoneNumber":
                        UserArray = UserArray.OrderBy(cp => cp.UsertelephoneNumber).ToList<ColProperty>();
                        break;
                    case "Usermail":
                        UserArray = UserArray.OrderBy(cp => cp.Usermail).ToList<ColProperty>();
                        break;
                    case "Userstate":
                        UserArray = UserArray.OrderBy(cp => cp.Userstate).ToList<ColProperty>();
                        break;
                }
            }
            else
            {
                switch (sort)
                {
                    case "Useraccount":
                        UserArray = UserArray.OrderByDescending(cp => cp.Useraccount).ToList<ColProperty>();
                        break;
                    case "Username":
                        UserArray = UserArray.OrderByDescending(cp => cp.Username).ToList<ColProperty>();
                        break;
                    case "Userdepartment":
                        UserArray = UserArray.OrderByDescending(cp => cp.Userdepartment).ToList<ColProperty>();
                        break;
                    case "Usertitle":
                        UserArray = UserArray.OrderByDescending(cp => cp.Usertitle).ToList<ColProperty>();
                        break;
                    case "Usermobile":
                        UserArray = UserArray.OrderByDescending(cp => cp.Usermobile).ToList<ColProperty>();
                        break;
                    case "UsertelephoneNumber":
                        UserArray = UserArray.OrderByDescending(cp => cp.UsertelephoneNumber).ToList<ColProperty>();
                        break;
                    case "Usermail":
                        UserArray = UserArray.OrderByDescending(cp => cp.Usermail).ToList<ColProperty>();
                        break;
                    case "Userstate":
                        UserArray = UserArray.OrderByDescending(cp => cp.Userstate).ToList<ColProperty>();
                        break;
                }
            }
            return UserArray;
        }

        #endregion
    }
}


 

ADHelper.cs:

using System;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    public class ADHelper
    {
        /// <summary>
        /// ldap用户
        /// </summary>
        public static string ldap = "LDAP://127.0.0.1/OU=测试组织机构,DC=abcd,DC=com";
        /// <summary>
        /// AD管理员用户名
        /// </summary>
        public static string winuser = "administrator";
        /// <summary>
        /// AD管理员密码
        /// </summary>
        public static string winpwd = "**********";
        /// <summary>
        /// 根对象
        /// </summary>
        public static DirectoryEntry deRoot = new DirectoryEntry(ldap, winuser, winpwd, AuthenticationTypes.Secure);

        /// <summary>
        ///查找并返回对象,查找范围包括参数ldap下的所有对象
        /// </summary>
        /// <param name="objectName">名称</param>
        /// <param name="catalog">类型(OU、Group、User)</param>
        /// <param name="t_ldap">ldap</param>
        /// <returns>是否存在</returns>
        public static DirectoryEntry ObjectExist(string objectName, string catalog, string t_ldap)
        {
            try
            {
                DirectoryEntry de = new DirectoryEntry(t_ldap, winuser, winpwd, AuthenticationTypes.Secure); ;
                DirectorySearcher deSearch = new DirectorySearcher();
                deSearch.SearchRoot = de;
                switch (catalog)
                {
                    case "User": deSearch.Filter = "(&(objectClass=user) (cn=" + objectName + "))"; break;
                    case "Group": deSearch.Filter = "(&(objectClass=group) (cn=" + objectName + "))"; break;
                    case "OU": deSearch.Filter = "(&(objectClass=OrganizationalUnit) (OU=" + objectName + "))"; break;
                    case "UserD": deSearch.Filter = "(&(objectClass=user) (distinguishedName=" + objectName + "))"; break;
                    default: break;
                }
                de.Close();
                SearchResultCollection results = deSearch.FindAll();
                if (results.Count == 0)
                {
                    return null;
                }
                else
                {
                    return results[0].GetDirectoryEntry();//返回找到的对象
                }
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
        }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值