- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
目前我想在 Active Directory 中找到当前用户拥有权限的所有组 WriteProperty .
问题是我可以找到直接插入用户的所有组,但是当用户在一个组中并且该组具有写入权限时,它不会显示。我认为设置 GetAccessRules() 的 bool 值在这里会有所帮助,但事实并非如此。
这是我已有的代码:
var identity = WindowsIdentity.GetCurrent().User;
var allDomains = Forest.GetCurrentForest().Domains.Cast<Domain>();
var allSearcher = allDomains.Select(domain =>
{
var searcher = new DirectorySearcher(new DirectoryEntry("LDAP://" + domain.Name));
//Apply some filter to focus on only some specfic objects
searcher.Filter = "(&(objectClass=group)(name=*part_of_group_name*))";
return searcher;
});
var itemsFound = allSearcher
.SelectMany(searcher => searcher.FindAll()
.Cast<SearchResult>()
.Select(result => result.GetDirectoryEntry()));
var itemsWithWriteAccess = itemsFound
.Where(entry => entry.ObjectSecurity.GetAccessRules(true, true, typeof(SecurityIdentifier))
.Cast<ActiveDirectoryAccessRule>()
.Where(rule => rule.IdentityReference == identity)
.Where(rule => (rule.ActiveDirectoryRights & ActiveDirectoryRights.WriteProperty) == ActiveDirectoryRights.WriteProperty)
.Count() > 0);
foreach (var item in itemsWithWriteAccess)
{
Debug.Print(item.Name);
}
最佳答案
经过很长时间和Harvey的帮助|通过this question我终于找到了一个很好的工作解决方案。
正如 Harvey 已经解释的那样,要真正进一步了解您将在 entry.Properties["allowedAttributesEffective"].Value
中得到什么可能有点困难。但对于正常用途,您只需检查此字段是否为非空即可获得写入权限。
示例代码如下:
// (replace "part_of_group_name" with some partial group name existing in your AD)
var groupNameContains = "part_of_group_name";
var identity = WindowsIdentity.GetCurrent().User;
var allDomains = Forest.GetCurrentForest().Domains.Cast<Domain>();
var allSearcher = allDomains.Select(domain =>
{
var searcher = new DirectorySearcher(new DirectoryEntry("LDAP://" + domain.Name));
// Apply some filter to focus on only some specfic objects
searcher.Filter = String.Format("(&(objectClass=group)(name=*{0}*))", groupNameContains);
return searcher;
});
var directoryEntriesFound = allSearcher
.SelectMany(searcher => searcher.FindAll()
.Cast<SearchResult>()
.Select(result => result.GetDirectoryEntry()));
var allowedTo = directoryEntriesFound.Select(entry =>
{
using (entry)
{
entry.RefreshCache(new string[] { "allowedAttributesEffective" });
var rights = entry.Properties["allowedAttributesEffective"].Value == null ? "read only" : "write";
return new { Name = entry.Name, AllowedTo = rights };
}
});
foreach (var item in allowedTo)
{
var message = String.Format("Name = {0}, AllowedTo = {1}", item.Name, item.AllowedTo);
Debug.Print(message);
}
关于c# - 如何找到当前用户具有 WriteProperty 访问权限的 ActiveDirectory 中的所有组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2810613/
在阅读 Active Directory 时,我遇到了 System.DirectoryServices.ActiveDirectory 和 Microsoft.ActiveDirectory.Man
我正在尝试使用 npm 模块 activedirectory在 Meteor 应用程序中,当我尝试按照文档创建新的事件目录时,出现错误。我正在从另一个 Meteor 项目中的工作示例进行复制,因此我知
我正在尝试设置 SVN 以针对 ActiveDirectory 进行身份验证。我知道如果您将 SVN 设置为使用 Apache 提供服务,这是可能的,但这样做会引入太多开销,并且 SVN 运行速度太慢
我想知道 Active Directory 中组的 member 属性是否有长度限制,以及通过 Java 进行查询时如何控制此限制。 我这么问是因为我正在查询一个具有嵌套组的组。一个基于公司的工具正在
我基本上是在尝试使用 DirectorySearcher 将我的结果过滤到一定范围的成员,但是这个过滤器没有返回任何结果。 "(&(objectClass=user)(memberof=CN=User
我正在尝试获取有关当前系统域的一些详细信息。我已经能够使用以下代码找到 Name、DomainMode 和 ForstMode: System.DirectoryServices.ActiveDire
关闭。这个问题需要 details or clarity 。它目前不接受答案。 想改善这个问题吗?添加详细信息并通过 editing this post 澄清问题。 4年前关闭。 Improve th
为什么下面的 get-adcomputer 命令行没有返回任何结果?当 cmdlet 不适应 powershell 语法时,这真的很烦人。至少这就是这里正在发生的事情。如果我执行写输出,它会准确显示我
我最近承担了一个应用程序的维护工作,该应用程序执行许多与 ActiveDirectory 相关的任务,包括查询和更新。 当然,我有现有的代码要查看,但我也很好奇是否有人有通过 C# 和 .Net 进行
我做了一些谷歌搜索,然后我发现了这段很有前途的代码 System.DirectoryServices.AccountManagement.PrincipalContext pc = new Syste
我正在开发一个使用 Azure ActiveDirectory 作为身份验证后端的解决方案。同时,我正在尝试设置本地测试环境 - 由于我没有可用的 Windows Server 级操作系统的计算机,我
我想使用 JavaScript 客户端哈希密码对 Active Directory 用户进行身份验证。那可能吗?目前我正在通过 https 连接以纯文本形式将密码传输到服务器。 这是我的 java 端
对访问 ActiveDirectory 的应用程序进行单元测试和/或模拟对 AD 的依赖性的最佳方法是什么? 所有必需的类型,如 DirectorySearcher 和 DirectoryEntry
如何通过电子邮件地址查询 ActiveDirectory 用户?给定的用户可以有多个电子邮件地址,例如 john.smite@acme.com 和 jsmith@acme.com。对于给定的电子邮件,
我正在尝试从帐户中检索到期日期。 我试过了 DirectoryEntry user = new DirectoryEntry(iMem); var AccountExpiration = DateTi
上周,我第一次接触到 PowerShell 和 ActiveDirectory。我希望能够找到不是管理员或域管理员的用户列表。 到目前为止,我知道如何使用以下命令/语句获取所有 ActiveDirec
我想检查 Windows 域上的用户/密码组合。现在我用下面的代码来做: bool Login(String username, String password) { var principa
我正在尝试使用 PrincipalContect 对象从 MVC 应用程序获取用户所属的 UserGroups。 以下是代码引用:http://anyrest.wordpress.com/2010/0
首先我想提一下,我不是 LDAP 专家。 我需要的是从我公司的 ldap 获取一些信息,包括用户照片。我的问题是,在获得所需的所有信息后,thumbnailPhoto似乎已被某种方式损坏。我将展示一个
我正在 Active Directory 环境中开发一个独立的 java 应用程序,通常的身份验证方式是 SingleSignOn。 但我有一些接口(interface)不支持 SSO。现在我正在考虑
我是一名优秀的程序员,十分优秀!