c# AD域 权限管理

c# AD域 权限管理我现在开始第一步,获取AD域用户所在的组,因为我想把菜单和界面按钮的功能由角色组来控制,用户加入角色组就可以获得相应的权限.这是我的思路.第一如何关联AD域并获取当前登录域的用户所在的角色组 ADUserMessage()代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.DirectorySer

大家好,又见面了,我是你们的朋友全栈君。

我现在开始第一步,获取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,根据用户组不同显示的结果不一样.



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145678.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安装vmware虚拟机步骤_如何安装vmware虚拟机

    安装vmware虚拟机步骤_如何安装vmware虚拟机一、基础介绍VMWare虚拟机软件是一个“虚拟PC”软件,它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启

    2022年8月2日
    7
  • 配置Cisco MDS光纤存储交换机配置zone[通俗易懂]

    配置Cisco MDS光纤存储交换机配置zone[通俗易懂]配置CiscoMDS光纤存储交换机(MDSMultilayerDirectorSwitch多层光纤阵列交换机)大概流程:1:创建VSAN,将端口加入VSAN2:创建ZONE,将端口加入ZONE3:创建zoneSet,将ZONE加入set,并启用zoneSet4:启用所有端口使用命令行基本配置MDS-1(config)#sw…

    2025年6月16日
    3
  • ewebeditor漏洞利用汇总[通俗易懂]

    ewebeditor漏洞利用汇总[通俗易懂]ewebeditor漏洞利用汇总2007年09月24日星期一22:43inurl:ewebeditor现在eWebSoft在线编辑器用户越来越多,危害就越来越大~首先介绍编辑器的一些默认特征:…

    2022年7月14日
    33
  • Spring Cloud Eureka集群

    Spring Cloud Eureka集群            SpringCloud基础教程[Eureka集群]NetflixEureka介绍SpirngCloudEureka使用NetflixEureka来实现服务注册与发现。它既包含了服务端组件,也包含了客户端组件,并且服务端与客户端均采用java编写,所以Eureka主要适用于通过java实现的分布式系统,或是JVM兼容语言构建的系统。E…

    2022年5月3日
    53
  • Window 平台下添加 tree 命令[通俗易懂]

    Window 平台下添加 tree 命令[通俗易懂]在WIndow平台下,系统自带的命令行工具CMD可以使用dir命令来以树结构打印目录文件,Powershell工具可以使用tree命令。但是,一般为了开发方便,通常会使用更接近Linux命令的Git-Bash作为常用的命令行工具,然而Git-Bash却不支持tree命令。以下为给Window平台下Git-Bash添加tree命令的方法。tree获取路…

    2022年7月24日
    36
  • 单片机交通信号灯控制系统设计_交通灯控制电路设计图

    单片机交通信号灯控制系统设计_交通灯控制电路设计图交通信号灯控制系统设计 作为一个硬件程序设计民工,最近一直在学习python,写个爬虫,排个序,再画个界面,其实还是挺好玩的。然而这不是我的主业啊!!!-_-|||下学期开学就要找工作了,明天刚好是新的一个月,还是滚回去调我的FPGA吧。今天先更新一个很小很小的例子作为开端,这是前几天xxx给我出的一道很随意的题目,主要是看面对一个项目…

    2022年9月24日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号