我现在开始第一步,获取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域 权限管理相关推荐
- AD域建设管理(二)| python3+ldap3管理AD域实践(批量创建OU、用户、改密码、更新OU与用户)
AD域建设管理(二)| python3+ldap3管理AD域实践(批量创建OU.用户.改密码.更新OU与用户) 1.使用前提 1.1.关于程序运行环境 1.2.关于AD域的准备和配置 2.问题和解决方 ...
- AD域建设管理(一)| 安装windows server2019、AD域、AD域证书服务
AD域建设管理(一)| 安装windows server2019.AD域.AD域证书服务 1.环境介绍及前言 2.安装配置win server 2019虚拟机 3.安装AD域服务.AD证书服务 3.1 ...
- AD域建设管理(四)| AD域实践(win server2019 RemoteApp前端修改与美化
AD域建设管理(四)| AD域实践(win server2019 RemoteApp前端修改与美化 0. debug需要的配置 1. 文字的修改 2. 图片的修改 3. 前端代码的修改 3.1. 帮助 ...
- Windows AD共享权限管理工具
ADManager Plus有一个专用于Active Directory共享权限管理的部分.此部分帮助Active Directory管理员克服在管理用户访问和企业中的共享活动时遇到的难题. 那么AD ...
- AD域用户批量修改密码_大公司如何对企业AD域进行管理?
AD域管理一直是企业IT管理员的重要工作之一,但随着目前国内企业发展的速度来看,越来越多企业在国内近几年经济环境的带动下越发壮大.企业壮大随之而来的自然是人员的扩充,因此AD域管理对IT管理员将是份巨 ...
- AD域统一管理计算机安装软件,微软域和AD域的计算机统一安装 域用户安装软件域客户端PC批量分配自动安装教程...
新建的VNC右键点编辑 打开计算机配置-策略-软件设置-软件安装 软件安装-右键新建数据包,从域控AD1的共享中选择TightVNC.msi添加进入,跳出的部署软件窗口,选择已分配 需要注意,这里路径 ...
- 微软ad域服务器 管理用户,管理 Azure AD 域服务的 DNS | Microsoft Docs
您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 管理 DNS 并在 A ...
- AD域用户密码重置_AD域自助管理之道
AD域管理一直以来都是企业IT管理员的一项重要工作之一.不过,IT管理员面临一些AD域用户管理问题时仍无法高效妥善处理.例如,由于域内执行密码策略,大量用户没有及时更改密码导致大量用户密码过期.管理员 ...
- Windows AD域功能介绍、Windows AD域方案介绍
Windows AD域功能介绍.Windows AD域方案介绍 功能一.AD域管理 https://www.manageengine.cn/products/ad-manager/ 1.AD域管理 通 ...
- 通过企业微信,向AD域过期用户发送更改密码提醒
目录 ·先决条件 ·语言与环境 ·基本思路 ·代码说明 1.连接LDAP查询密码过期的用户 2.获取企业微信中应用的Access_Token 3.通过邮箱获取用户在企业微信中的ID 4.通过企业微信的 ...
最新文章
- Android动态修改选中和不选中的Button图片颜色
- zabbix工作流程(自定义添加监控项目)
- BPSK、QPSK、MPSK、QAM、16QAM的调制解调Matlab实现
- LFS-Git命令行向Github上传大文件
- php系统毕设答辩问题,计算机专业毕业论文答辩的一般程序及常见问题
- pycharm怎么关联python_Python3 安装pylint 及与PyCharm关联
- Javascript设计模式理论与实战:适配器模式
- apache添加支持php的模块,配置Apache支持PHP5 apache php 套件 apache添加php模块 apache部署php项...
- Java 7中的TransferQueue
- 移动脱机 Outlook 数据文件 (.ost)
- Python爬虫 获得淘宝商品评论
- android 常见面试题以及答案
- 【微机】ALU的核心就是带标志加法器
- 什么是世界观、人生观、价值观?
- 福建选择阿里云服务器地域(华南/华东/华北)哪个更好?
- 基于HDP使用Flume实时采集MySQL中数据传到Kafka+HDFS或Hive
- 零基础自学R语言 1 R语言介绍 1.5 RStudio软件
- 问道手游服务器找不到,问道手游安卓苹果互通服怎么不显示 鹊桥相会不能互通解决方法...
- cad坐标归零lisp_Z轴归零源码说明 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
- 好人不长命 祸害遗千年
热门文章
- opencv convertTo函数详解
- 直方图均衡化与直方图规定化
- 关于一些初级ACM竞赛题目的分析和题解(一)。
- java快速生成接口文档方法总结
- idea编译android项目,IDEA创建Android项目并反编译APK
- rake matlab,基于MATLABRake接收机仿真及性能分析.doc
- X509Certificate证书如何获取16位长度serial number?
- Jmeter基础教程
- 《深入浅出WPF》读书笔记
- Python-继人物词频统计三国演义之后-三国词云(Wordcloud)