我现在开始第一步,获取AD域用户所在的组,因为我想把菜单和界面按钮的功能由角色组来控制,用户加入角色组就可以获得相应的权限. 这是我的思路.

第一 如何关联AD域 并获取当前登录域的用户所在的角色组  ADUserMessage() 代码如下:

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

namespace WindowsFormsApplication1
{
    public class AdClass
    {
        public static string ADUserMessage()
        {
            //获取当前登录域的用户名 和域名
            // Console.WriteLine("用户名:" + Environment.UserName+Environment.UserDomainName);    //Console类 调试的时候使用,在输出界面显示          
            string adgroup = "";  //用户所属的角色组

//DirectoryEntry 可封装 ActiveDirectory域服务层次结构中的节点或对象,使用此类绑定到对象、读取属性和更新特性
            DirectoryEntry entry = new DirectoryEntry(); //直接获取当前域用户所在的信息 //GetDirectoryObject(); 再次登录用户名和密码进行验证
            //DirectorySearcher类可对 Active Directory域服务层次结构执行查询;

DirectorySearcher search = new DirectorySearcher(entry);
            //设置查询的过滤条件

search.Filter = "(SamAccountName=" + Environment.UserName + ")";
            StringBuilder groupNames = new StringBuilder();
            try
            {
                SearchResult result = search.FindOne();
                //得到当前登录用户所在角色组的个数
                int propertyCount = result.Properties["memberOf"].Count;
                String dn = "";
                int equalsIndex, commaIndex;

if (result != null)
                {
                    MessageBox.Show("域登录成功");
                    MessageBox.Show(result.Path.ToString());
                    //当前登录用户MEMBER  OF 的信息
                    for (int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++)
                    {
                        dn = (String)result.Properties["memberOf"][propertyCounter];                      
                        equalsIndex = dn.IndexOf("=", 1);
                        commaIndex = dn.IndexOf(",", 1);                       
                        if (-1 == equalsIndex)
                        {
                            adgroup = "";
                        }
                        groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1));
                        groupNames.Append("/");                        
                    }
                    //得到当前登录域用户的角色组
                    adgroup = groupNames.ToString();                   
                }
            }
            catch (Exception e1)
            {
                MessageBox.Show(e1.Message);
                adgroup = "";               
            }           
            return adgroup;

}

//连接AD数据库  再次登录用户名和密码进行验证

//"pssword" 是当前登录域的用户的密码; path : LDAP://IP地址/DC=,DC=
        /* private static DirectoryEntry GetDirectoryObject()
         {
             DirectoryEntry entry = null;
             try
             {
                 entry = new DirectoryEntry(path, Environment.UserName, "pssword", AuthenticationTypes.Secure);
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message);
             }
             return entry;
         }
         */

public  static void GetAllOU()  //获取所有用户组
        {
            DirectoryEntry entry = new DirectoryEntry("LDAP://");
            DirectorySearcher search = new DirectorySearcher(entry);
            //search.Filter = ("(objectClass=organizationalUnit)");
            search.Filter = ("(objectClass=user)");
            foreach(SearchResult result in search.FindAll())
            {
                //Console.Write(result.GetDirectoryEntry().Name.ToString());
                Console.WriteLine(result.GetDirectoryEntry().Name.ToString());
                /*Console.WriteLine(result.GetDirectoryEntry().Properties["objectClass"]);
                DirectoryEntry user2 = result.GetDirectoryEntry();
                foreach(string property in user2.Properties.PropertyNames)
                {
                    Console.WriteLine("字段名:"+property);
                }
                */
            }
        }

public static void GetMail()
        {
            DirectoryEntry entry = new DirectoryEntry(); //直接获取当前域用户所在的信息 //GetDirectoryObject(); 再次登录用户名和密码进行验证
            DirectorySearcher search = new DirectorySearcher(entry);
            search.Filter = "(SamAccountName=" + Environment.UserName + ")";
            SearchResult resu2 = search.FindOne();
            DirectoryEntry user2 = resu2.GetDirectoryEntry();
            Console.WriteLine(user2.Properties["mail"][0].ToString());
            Console.WriteLine(resu2.GetDirectoryEntry().Properties["mail"][0].ToString());
           
           // Console.WriteLine(user2.Properties["cn"][0].ToString());
           // Console.WriteLine(user2.Properties["description"][0].ToString());
           // Console.WriteLine(user2.Properties["telephoneNumber"][0].ToString());
           // Console.WriteLine(user2.Properties["initials"][0].ToString());

}

public static DataSet GetAllGroup(string username1)  //获取指定用户所有角色组
        {
            MessageBox.Show("1 username1=" + username1.ToString());

StringBuilder userNames = new StringBuilder();
            //string adgroup = "";

DataSet ds = new DataSet();
            DataTable dt = new DataTable("gptb");
            ds.Tables.Add(dt);
            dt.Columns.Add("GROUPNAME");

DirectoryEntry entry = new DirectoryEntry("LDAP://abc");
            DirectorySearcher search = new DirectorySearcher(entry);
            //search.Filter = ("(objectClass=user)");
            search.Filter = "(SamAccountName=" + username1.ToString() + ")";
            SearchResult result = search.FindOne();
           
            int propertyCount = result.Properties["memberOf"].Count;
            String dn = "";
            int equalsIndex, commaIndex;
            //登录用户MEMBER  OF 的信息
            for (int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++)
            {
                dn = (String)result.Properties["memberOf"][propertyCounter];
                equalsIndex = dn.IndexOf("=", 1);
                commaIndex = dn.IndexOf(",", 1);
                if (-1 == equalsIndex)
                {
                   //adgroup = "";
                }
                userNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1));
                //MessageBox.Show("1=" + userNames.ToString());
                //userNames.Append("/");

//将用户的角色组信息录入到dt中
                DataRow dr = dt.NewRow();
                dr["GROUPNAME"] = userNames.ToString();
                dt.Rows.Add(dr);
                userNames.Remove(0, userNames.Length); //清空userName中的内容

}
            //得到当前登录域用户的角色组
            //adgroup = userNames.ToString();            
            // return adgroup;
            return ds;
        }

}
}

这样就获得了当前登录到域的用户所在的角色组,显示的结果为: Administrators/Domain Admins/Enterprise Admins/Schema Admins,根据用户组不同显示的结果不一样.

c# AD域 权限管理相关推荐

  1. AD域建设管理(二)| python3+ldap3管理AD域实践(批量创建OU、用户、改密码、更新OU与用户)

    AD域建设管理(二)| python3+ldap3管理AD域实践(批量创建OU.用户.改密码.更新OU与用户) 1.使用前提 1.1.关于程序运行环境 1.2.关于AD域的准备和配置 2.问题和解决方 ...

  2. AD域建设管理(一)| 安装windows server2019、AD域、AD域证书服务

    AD域建设管理(一)| 安装windows server2019.AD域.AD域证书服务 1.环境介绍及前言 2.安装配置win server 2019虚拟机 3.安装AD域服务.AD证书服务 3.1 ...

  3. AD域建设管理(四)| AD域实践(win server2019 RemoteApp前端修改与美化

    AD域建设管理(四)| AD域实践(win server2019 RemoteApp前端修改与美化 0. debug需要的配置 1. 文字的修改 2. 图片的修改 3. 前端代码的修改 3.1. 帮助 ...

  4. Windows AD共享权限管理工具

    ADManager Plus有一个专用于Active Directory共享权限管理的部分.此部分帮助Active Directory管理员克服在管理用户访问和企业中的共享活动时遇到的难题. 那么AD ...

  5. AD域用户批量修改密码_大公司如何对企业AD域进行管理?

    AD域管理一直是企业IT管理员的重要工作之一,但随着目前国内企业发展的速度来看,越来越多企业在国内近几年经济环境的带动下越发壮大.企业壮大随之而来的自然是人员的扩充,因此AD域管理对IT管理员将是份巨 ...

  6. AD域统一管理计算机安装软件,微软域和AD域的计算机统一安装 域用户安装软件域客户端PC批量分配自动安装教程...

    新建的VNC右键点编辑 打开计算机配置-策略-软件设置-软件安装 软件安装-右键新建数据包,从域控AD1的共享中选择TightVNC.msi添加进入,跳出的部署软件窗口,选择已分配 需要注意,这里路径 ...

  7. 微软ad域服务器 管理用户,管理 Azure AD 域服务的 DNS | Microsoft Docs

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 管理 DNS 并在 A ...

  8. AD域用户密码重置_AD域自助管理之道

    AD域管理一直以来都是企业IT管理员的一项重要工作之一.不过,IT管理员面临一些AD域用户管理问题时仍无法高效妥善处理.例如,由于域内执行密码策略,大量用户没有及时更改密码导致大量用户密码过期.管理员 ...

  9. Windows AD域功能介绍、Windows AD域方案介绍

    Windows AD域功能介绍.Windows AD域方案介绍 功能一.AD域管理 https://www.manageengine.cn/products/ad-manager/ 1.AD域管理 通 ...

  10. 通过企业微信,向AD域过期用户发送更改密码提醒

    目录 ·先决条件 ·语言与环境 ·基本思路 ·代码说明 1.连接LDAP查询密码过期的用户 2.获取企业微信中应用的Access_Token 3.通过邮箱获取用户在企业微信中的ID 4.通过企业微信的 ...

最新文章

  1. Android动态修改选中和不选中的Button图片颜色
  2. zabbix工作流程(自定义添加监控项目)
  3. BPSK、QPSK、MPSK、QAM、16QAM的调制解调Matlab实现
  4. LFS-Git命令行向Github上传大文件
  5. php系统毕设答辩问题,计算机专业毕业论文答辩的一般程序及常见问题
  6. pycharm怎么关联python_Python3 安装pylint 及与PyCharm关联
  7. Javascript设计模式理论与实战:适配器模式
  8. apache添加支持php的模块,配置Apache支持PHP5 apache php 套件 apache添加php模块 apache部署php项...
  9. Java 7中的TransferQueue
  10. 移动脱机 Outlook 数据文件 (.ost)
  11. Python爬虫 获得淘宝商品评论
  12. android 常见面试题以及答案
  13. 【微机】ALU的核心就是带标志加法器
  14. 什么是世界观、人生观、价值观?
  15. 福建选择阿里云服务器地域(华南/华东/华北)哪个更好?
  16. 基于HDP使用Flume实时采集MySQL中数据传到Kafka+HDFS或Hive
  17. 零基础自学R语言 1 R语言介绍 1.5 RStudio软件
  18. 问道手游服务器找不到,问道手游安卓苹果互通服怎么不显示 鹊桥相会不能互通解决方法...
  19. cad坐标归零lisp_Z轴归零源码说明 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  20. 好人不长命 祸害遗千年

热门文章

  1. opencv convertTo函数详解
  2. 直方图均衡化与直方图规定化
  3. 关于一些初级ACM竞赛题目的分析和题解(一)。
  4. java快速生成接口文档方法总结
  5. idea编译android项目,IDEA创建Android项目并反编译APK
  6. rake matlab,基于MATLABRake接收机仿真及性能分析.doc
  7. X509Certificate证书如何获取16位长度serial number?
  8. Jmeter基础教程
  9. 《深入浅出WPF》读书笔记
  10. Python-继人物词频统计三国演义之后-三国词云(Wordcloud)