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


相关推荐

  • php源码中powerby,如何去掉织梦dedecms底部调用cfg_powerby的power by dedecms

    php源码中powerby,如何去掉织梦dedecms底部调用cfg_powerby的power by dedecms我们平常使用织梦后台做建站的时候都会发现,如果调用版权信息的时候,在底部使用cfg_powerby调用的时候出现powerbydedecms的链接信息,而这个链接又是个导出链接,我们怎么样才能一劳永逸的直接去掉呐,下面站优云小编就跟大家分享一下。在之前版本我们的解决方法是:1、去掉{dede:globalname=’cfg_powerby’/};2、进入后台,点击系统->系统基本设…

    2022年7月13日
    16
  • 【detectron】FPN网络输入

    【detectron】FPN网络输入在 detectron 训练网络的过程中 给网络送的 blob 在下面的函数中生成 位于 minibatch py defget minibatch roidb Givenaroidb constructami Wecollectblo

    2025年12月7日
    4
  • SPFA算法详解

    SPFA算法详解SPFA算法~~它死了~~

    2022年7月4日
    22
  • mpu6050计步原理_佳明速度传感器安装

    mpu6050计步原理_佳明速度传感器安装下面三部分内容包括:计步原理、基于MPU6050的计步实现、基于MPU6050的久坐检测实现,第一部分为转载内容,做东西最好要了解下关键部分的原理。一、计步原理以下转自:http://www.elecfans.com/yuanqijian/sensor/20170816539797.html1.先要摸清模型的特征目前,大部分设备都提供了可以检测各个方向的加速度传感器…

    2022年9月28日
    5
  • 高清视频编码格式_如何将高清视频转化为蓝光

    高清视频编码格式_如何将高清视频转化为蓝光收藏于2012-01-09迁移自个人百度空间—————————高清视频编码最常用的编码格式是MPEG2-TS、MPEG4、H.264和VC-1这四种算法。          MPEG2由MPEG(MovingPictureExpertsGroup)运动图像专家组制定,这是国际标准化组织(ISO)于1988年成立的专责制定有关运动压缩编码标…

    2022年9月25日
    4
  • JavaScript中的document.cookie的使用

    JavaScript中的document.cookie的使用 我们已经知道,在document对象中有一个cookie属性。但是Cookie又是什么?“某些Web站点在您的硬盘上用很小的文本文件存储了一些信息,这些文件就称为Cookie。”——MSIE帮助。一般来说,Cookies是CGI或类似,比HTML高级的文件、程序等创建的,但是javascript也提供了对Cookies的很全面的访问权利。  我们先要学

    2022年7月27日
    8

发表回复

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

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