在Sharepoint中查找用户组sid

本文关键字:用户组 sid 查找 Sharepoint | 更新日期: 2023-09-27 18:18:15

我需要找出当前用户属于我的Sharepoint (2007) webpart中的所有AD组sid。

我想使用System.DirectoryServices.AccountManagement命名空间:

using (var context = new PrincipalContext( ContextType.Domain ))
{
    using (var user = UserPrincipal.FindByIdentity( context, accountName ))
    {
        var groups = user.GetAuthorizationGroups();
        ...
    }
}

,但我得到以下错误:

事件ID: 10016通过权限设置(特定于应用程序)是用户NT AUTHORITY '网络服务的SID (S-1-5-20)地址localhost(使用LRPC)没有被授权激活(本地)的COM服务器应用程序与CLSID{61738644 - f196 - 11 - d0 - 9953 - 00 - c04fd919c1}

这个问题可以通过http://support.microsoft.com/kb/899965解决但是这种方法需要更改注册表值(应用程序的所有权,所以你可以在dcomcnfg中更改应用程序的值),然后在dcomcnfg的COM安全中更改用户权限,这对我来说不是一个选择。

是否有另一种方法来访问Sharepoint内当前用户组的sid ?

我真的希望我能在SPContext.Current.Web.CurrentUser中找到这些值。

在Sharepoint中查找用户组sid

你需要走SharePoint的方式,不使用System程序集,而是使用SharePoint程序集。

每个用户的SID在SPUser.Sid属性中。如果您只想查找AD组,则可以检查SPUser.IsDomainGroup属性。

现在您需要做的就是检查当前用户:` SPContext.Current.Web。当前用户(a SPUser ' object).

要回答如何获得用户所属的所有组的问题,实际上需要使用System.DirectoryServices。您的问题的解决方案显示在以下stackoverflow帖子:

  • 在c#中,如何访问活动目录以获得某个用户所属的组列表?
  • 查询AD查找用户的所有组-缺少一个组

所以简而言之:SPUser对象以及通过DirectoryServices查询活动目录