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


相关推荐

  • spring cloud eurake server「建议收藏」

    spring cloud eurake server「建议收藏」1、概念:待补充2、入门2.1、启动eurekaserver此处示例是maven-module搭建,第一段为maven项目的dependency,后面的为module-springcloud-server的示例dependency<parent><groupId>org.springframewo…

    2022年6月5日
    33
  • 如何在mac上录屏(并且录制到屏幕内部声音)完美解决方案

    如何在mac上录屏(并且录制到屏幕内部声音)完美解决方案文章目录前言一、quicktimeplayer+Soundflower方案解决quicktimeplayer不能录制系统声音的缺陷在quicktimeplayer选择刚配置的音频二、iShot+Soundflower方案总结前言一直想找一款在mac录屏的软件,直到今天才有了完美的解决方案,总所周知,mac上有自带的录屏软件(quicktimeplayer),这款软件简单,但是因为其不能录制屏幕内部的声音而不被新手使用。而其他录屏软件大部分需要付款,大部分开源的也不能录制屏幕内部的声音。接下来

    2022年6月12日
    84
  • js定时器setinterval_nodejs定时器

    js定时器setinterval_nodejs定时器最近帮公司的APP前端做RN,要求是用typescript,然后就掉进坑里了,别的不说,先说说setInterval()这个定时器函数,因为typescript是强类型语言,定义setInterval()必须定义其返回值,但是你无论用百度或者谷歌搜中文也好英文也罢,都告诉你setInterval()的返回值类型是number,但是真的是这样么?让我们看看如果你将setInterval()定…

    2022年9月27日
    0
  • 用计算机套路别人,套路计算器隐藏版[通俗易懂]

    用计算机套路别人,套路计算器隐藏版[通俗易懂]套路计算器隐藏版是款非常适合撩妹的神器,各种整蛊玩法,套路你的女朋友,操作简单,不需要root免费使用,轻松的哄女朋友开心。套路计算器隐藏版特色1.在这里都可以跟你的好友们设定任何的计算套路。2.在使用的时候看起来就跟普通的计算器应用差不多。3.他的套路秘诀就在输入计算结果之后,会显示提前设定的文字。4.各种的文章内容都可以设定到计算里面。套路计算器隐藏版怎么用进入的先设置好内容,进入后打开的都是…

    2022年6月9日
    136
  • pycharm 断点调试失效[通俗易懂]

    pycharm 断点调试失效[通俗易懂]pycharm断点调试失效,再第一行执行代码打了断点,Debug之后还是全部运行,但是在其他行打断点就可以正常调试。试了好多其他博主写的方法,都没用,最后发现是因为第一行是注释,把第一行的注释移到下面或第一行可执行代码的后面就可以调试了…

    2022年10月26日
    0
  • vue中使用定时器setInterval

    vue中使用定时器setIntervalvue中使用定时器setIntervalthis.timer=setInterval(this.fetchData,1000);clearInterval(this.timer);beforeDestroy(){clearInterval(this.timer);},

    2022年10月30日
    0

发表回复

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

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