在Sharepoint中查找用户的组SID

时间:2011-12-16 09:58:26

标签: c# sharepoint active-directory

我需要在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 \ NETWORK SERVICE的SID(S-1-5-20)地址localhost(使用LRPC)无权为具有CLSID的COM服务器应用程序激活(本地) {61738644-F196-11D0-9953-00C04FD919C1}

这可以通过此http://support.microsoft.com/kb/899965修复 但是这种方法需要更改注册表值(应用程序的所有权,因此您可以在dcomcnfg更改应用程序值)以及更高版本的dcomcnfg COM安全性的用户权限,这对我来说不是一个选项。

是否有其他方法可以在Sharepoint中访问当前用户的组SID?

我真的希望我能在SPContext.Current.Web.CurrentUser.Groups中找到这些值,但显然不是。

1 个答案:

答案 0 :(得分:1)

您需要在此处使用SharePoint方式,而不是使用System程序集,而是使用SharePoint程序集。

每个用户的SID位于SPUser.Sid属性中。由于您只想查找AD群组,因此您可以查看.IsDomainGroup的{​​{1}}属性。

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

要回答您的问题如何获取用户所属的所有群组,您实际 需要使用(a。您的问题的解决方案显示在以下stackoverflow帖子中:

简而言之:System.DirectoryServices对象以及通过SPUser查询Active Directory