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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CPLD与FPGA的区别

    CPLD与FPGA的区别FPGA和CPLD是两种著名的数字逻辑芯片。当涉及到内部架构时,这两种芯片显然是不同的。FPGA:现场可编程门阵列,是一种可编程逻辑芯片。它是一个伟大的芯片,因为它可以被编程去做几乎任何一种数字功能。FPGA的架构允许芯片具有很高的逻辑容量。它被用于设计要求很高的门数和它们的延迟是相当不可预测的,因为它的结构。FPGA被认为是“细粒”,因为它包含了很多可以达到10万的微小逻辑块。这是人组合逻辑和记…

    2022年5月4日
  • 史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)

    史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无~中招了咩~,还有一些同学依旧在使用eclipse或者Myeclipse开发,我想对这些朋友说IDEA的编译速度很快,人生苦短,来不及解释了,直接上手idea吧。这篇文章每一步搭建过程都测试过了,应该不会有什么差错。本文章还有个比较优秀的特点,就是idea的使用,基本上关于idea的操作都算是比较详细的,所以不用太担心不会撸idea!最后,本文

    2022年6月14日
  • win10 专业工作站 激活码_通用破解码

    win10 专业工作站 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
  • 进程和线程的区别(超详细)

    进程和线程的区别(超详细)进程和线程进程一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。线程进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟…

    2022年7月25日
  • 小程序上传图片加水印

    小程序上传图片加水印思路:1.点击图片上传2.加水印3.传给后台html<canvasclass=’canvas’canvas-id=”firstCanvas”></canvas>css.canvas{border:2rpxsolidpink;background:pink;width:100%;height:100%;//position:fixed;left:100%;想隐藏画布单又想执行画布方法,用这个css;用display会不执行

    2022年6月16日
  • win10安装vs2008失败1935_LTE切换失败的解决方案

    win10安装vs2008失败1935_LTE切换失败的解决方案今天刚升级了WIN10系统,重新安装VS2008(项目需要),但是点击安装程序后,出现此应用程序需要.NET3.5(包括.NET2.0和3.0),如图:如果你选择“下载并安装此功能。Windows将从Windows更新中获取所需的文件并完成安装”,那么你就耐心等吧,下载的速度奇慢。现在讲解一下一种无需在线下载,只需要有Win10ISO文件即可本地安装.NETFramework3.5的方…

    2022年9月6日

发表回复

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

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