【问题标题】:Getting User Permissions From Active Directory In SharePoint Groups从 SharePoint 组中的 Active Directory 获取用户权限
【发布时间】:2012-04-14 07:18:01
【问题描述】:

我的任务是一些涉及以下场景的 SharePoint 工作。

在某些情况下,用户位于 Active Directory 组中,其权限直接绑定到 AD 组,在某些情况下,AD 组被分配给 SharePoint 组。

我的问题是,如果用户没有直接分配给组/权限但实际上在 Active Directory 组中,我该如何检查 SPUser 的权限?我需要检查用户的权限级别。

例如:

用户:UserX 属于 AD 组“SHAREPOINT_POWER_USERS”,该组具有“贡献”权限并属于 SharePoint 组“IT 支持组”。

由于用户不存在于高级权限或共享点组中,是否有办法以编程方式检索此内容?我可以通过执行以下操作来访问它吗:

//Pseudocode to access groups
SPUser user = SPContext.Current.Web.CurrentUser;
SPGroupCollection collection = user.Groups;

请告诉我这是如何工作的。

谢谢。

【问题讨论】:

    标签: c# .net sharepoint sharepoint-2007 moss


    【解决方案1】:

    简单。使用SPUtility.GetPrincipalsInGroup

    这里的旧帖子中有一个很好的例子:Getting members of an AD domain group using Sharepoint API

    【讨论】:

      【解决方案2】:

      如果我有一个 AD 用户 UserX,添加到 AD 组“TestADGroup” 现在,在 sharepoint 中,我将这个 AD 组添加到“TestSPGroup”

      以下将返回 true.. 如果 UserX 已登录 web.IsCurrentUserMemberOfGroup(web.Groups["TestSPGroup"].ID);

      http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.iscurrentusermemberofgroup.aspx

      【讨论】:

        【解决方案3】:

        您可以直接与 AD 本身对抗,获取成员的组,如果他们所属的组之一拥有对象的权限,则您授予权限(即显示对象等)。

        试试:http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#39

        public ArrayList Groups(string userDn, bool recursive)
        {
            ArrayList groupMemberships = new ArrayList();
            return AttributeValuesMultiString("memberOf", userDn,
                groupMemberships, recursive);
        }
        
        public string AttributeValuesSingleString
            (string attributeName, string objectDn)
        {
            string strValue;
            DirectoryEntry ent = new DirectoryEntry(objectDn);
            strValue = ent.Properties[attributeName].Value.ToString();
            ent.Close();
            ent.Dispose();
            return strValue;
        }
        
        public string GetObjectDistinguishedName(objectClass objectCls,
            returnType returnValue, string objectName, string LdapDomain)
        {
            string distinguishedName = string.Empty;
            string connectionPrefix = "LDAP://" + LdapDomain;
            DirectoryEntry entry = new DirectoryEntry(connectionPrefix);
            DirectorySearcher mySearcher = new DirectorySearcher(entry);
        
            switch (objectCls)
            {
                case objectClass.user:
                    mySearcher.Filter = "(&(objectClass=user)
                (|(cn=" + objectName + ")(sAMAccountName=" + objectName + ")))";
                    break;
                case objectClass.group:
                    mySearcher.Filter = "(&(objectClass=group)
                (|(cn=" + objectName + ")(dn=" + objectName + ")))";
                    break;
                case objectClass.computer:
                    mySearcher.Filter = "(&(objectClass=computer)
                    (|(cn=" + objectName + ")(dn=" + objectName + ")))";
                    break;
            }
            SearchResult result = mySearcher.FindOne();
        
            if (result == null)
            {
                throw new NullReferenceException
                ("unable to locate the distinguishedName for the object " +
                objectName + " in the " + LdapDomain + " domain");
            }
            DirectoryEntry directoryObject = result.GetDirectoryEntry();
            if (returnValue.Equals(returnType.distinguishedName))
            {
                distinguishedName = "LDAP://" + directoryObject.Properties
                    ["distinguishedName"].Value;
            }
            if (returnValue.Equals(returnType.ObjectGUID))
            {
                distinguishedName = directoryObject.Guid.ToString();
            }
            entry.Close();
            entry.Dispose();
            mySearcher.Dispose();
            return distinguishedName;
        }
        

        【讨论】:

          猜你喜欢
          • 2011-10-14
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-26
          相关资源
          最近更新 更多