如何以编程方式获取有权访问SharePoint中的文件或文件夹的用户和组的列表

戴维·德沃(David Drever)

我正在尝试找到一种方法,以获取有权访问继承中断的文件夹或文件的AD用户和AD组的列表。我不需要知道如何找到继承断开的部分,我已经了解了这一部分,但是在查找每个具有访问权限的用户或组时遇到了问题。我不想看到AD组中有哪些用户,只想看到正在访问文件夹的组的名称。这背后的用例是我们不希望将安全文件夹共享给单个用户。所有这些都只能由AD组控制(网站所有者无权将用户添加到安全文件夹)。还需要找出该文件夹中是否有任何文件不继承自该文件夹,并且也共享给各个用户而不是AD组(希望这是有道理的)。这是我到目前为止的内容,并且在一定程度上可以奏效,

到目前为止,这是我已经编写的代码。它接受文件或文件夹的item对象以及对字符串的引用。它扫描访问,然后构建用分号分隔的用户列表,如果spuser对象之一是用户而不是组,则返回true:

/// <summary>
    /// Provides list of users\groups that have access to a List Item.
    /// </summary>
    /// <param name="spListItem">Item to check access of</param>
    /// <returns>semi colon delimited list of users\groups with access in a referenced list and boolean value indicating if a direct user exists</returns>
    public bool GetListItemUserAccess(SPListItem spListItem, ref string accountsWithAccess)
    {
        //string accountsWithAccess = string.Empty;
        bool IsFirstIteration = true;
        bool domainUserExits = false;
        SPRoleAssignmentCollection spItemRoles = spListItem.RoleAssignments;    
        SPRoleDefinitionCollection rolesInWeb = spListItem.Web.RoleDefinitions;

        foreach(SPRoleAssignment spRole in spItemRoles)
        {

            SPPrincipal spPrincipal = spRole.Member;

            //cast as SPGroup or SPUser to determine if is a SPGroup or User
            if((spPrincipal as SPGroup) != null)
            {
                SPGroup spGroup = spPrincipal as SPGroup;
                SPUserCollection usersInGroup = spGroup.Users;

                //report on each user in group
                foreach(SPUser spUser in usersInGroup)
                {
                    //check to see if it is a user group
                    if(!spUser.IsDomainGroup)
                    {
                        domainUserExits = true;
                    }

                    //add to list for report.
                    if(IsFirstIteration)
                    {
                        IsFirstIteration = false;                            
                    }
                    else
                    {
                        accountsWithAccess += ";";                            
                    }

                    //depending on the account type sometimes the Login name has the credentials and sometimes it has 
                    //a UID
                    if (spUser.LoginName.ToLower().Contains("<company name>"))
                    {
                        accountsWithAccess += this.ParseUserIDFromClaim(spUser.LoginName);
                    }
                    else
                    {
                        accountsWithAccess += this.ParseUserIDFromClaim(spUser.Name);
                    }
                }
            }
            else if((spPrincipal as SPUser) != null)
            {
                //check to see if the user has limited access only (we don't report on this as this occurs when user has access to something in site)
                  if(!spListItem.DoesUserHavePermissions(spPrincipal as SPUser, SPBasePermissions.ViewListItems))
                {
                    continue;
                }

                //check to see if it is a user group
                if (!(spPrincipal as SPUser).IsDomainGroup)
                {
                    domainUserExits = true;
                }

                //add to list for report.
                if(IsFirstIteration)
                {
                    IsFirstIteration = false;
                }
                else
                {
                    accountsWithAccess += ";";
                }

                //depending on the account type sometimes the Login name has the credentials and sometimes it has 
                //a UID
                if (spPrincipal.LoginName.ToLower().Contains("<company name>"))
                {
                    accountsWithAccess += this.ParseUserIDFromClaim(spPrincipal.LoginName);
                }
                else
                {
                    accountsWithAccess += this.ParseUserIDFromClaim(spPrincipal.Name);
                }
            }
        }
        return domainUserExits;
    }
戴维·德沃(David Drever)

因此,问题在于该代码既返回了有权访问该文件夹的用户或用户组,又返回了对该项目具有有限访问权限的其他用户,因为他们可以访问该站点中的其他位置。

我终于通过插入以下代码纠正了该问题:

if (spRole.RoleDefinitionBindings.Count > 1 || !spRole.RoleDefinitionBindings.Xml.ToString().Contains("Limited Access"))

{
  //Process accounts
}

这样做是如果用户为列表项绑定了多个角色,或者该用户不是“受限访问”,则它将处理该帐户。否则,实际上是这些“幻像访问”之一没有直接授予列表项的访问权限

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法获得我有权访问的文件夹的目录列表

来自分类Dev

如何以编程方式在 Outlook 中创建全局地址列表文件夹?

来自分类Dev

如何以编程方式在TFS中获取子文件夹?

来自分类Dev

如何以编程方式在TFS中获取子文件夹?

来自分类Dev

如何以编程方式修改现有apk中Assets文件夹中的数据?

来自分类Dev

如何以编程方式删除Cloud Storage Bucket中文件夹中的所有内容

来自分类Dev

列出用户有权访问的文件和目录

来自分类Dev

如何删除文件夹所有权?(Windows 7和Windows XP)

来自分类Dev

如何以编程方式授予虚拟用户对文件夹(或文件)的权限

来自分类Dev

Gnu / Linux命令列出所有有权访问一个文件夹的用户

来自分类Dev

在不更改所有权的情况下授予用户访问文件夹的权限?

来自分类Dev

如何以编程方式打开带有myapp文件夹的默认“文件”应用程序?

来自分类Dev

如何以编程方式访问MATLAB的当前文件夹历史记录

来自分类Dev

如何以编程方式访问MATLAB的当前文件夹历史记录

来自分类Dev

如何以编程方式从mipmap文件夹加载图像?

来自分类Dev

如何以编程方式处理文件夹系统中的音频文件?

来自分类Dev

在SharePoint 2013中以编程方式创建文件夹

来自分类Dev

如何在不拥有所有权的情况下获取文件夹的大小?

来自分类Dev

如何以编程方式(使用PowerShell,WMI等)查找和打开文件夹的先前版本?

来自分类Dev

管理员不再有权访问共享文件夹

来自分类Dev

管理员不再有权访问共享文件夹

来自分类Dev

将文件夹所有权从根更改为用户

来自分类Dev

获取文件夹所有权并在Powershell中向域帐户添加完全权限?

来自分类Dev

如何以编程方式更改文件夹中所有对象的状态?

来自分类Dev

阻止Rsync更改排除列表的文件夹的所有权

来自分类Dev

如何以编程方式在Windows Phone 8中创建相册文件夹

来自分类Dev

如何以编程方式在Windows Phone 8中创建相册文件夹

来自分类Dev

如何以编程方式取消嵌套Windows中的多个文件夹?

来自分类Dev

如何以根用户身份访问文件夹?

Related 相关文章

  1. 1

    无法获得我有权访问的文件夹的目录列表

  2. 2

    如何以编程方式在 Outlook 中创建全局地址列表文件夹?

  3. 3

    如何以编程方式在TFS中获取子文件夹?

  4. 4

    如何以编程方式在TFS中获取子文件夹?

  5. 5

    如何以编程方式修改现有apk中Assets文件夹中的数据?

  6. 6

    如何以编程方式删除Cloud Storage Bucket中文件夹中的所有内容

  7. 7

    列出用户有权访问的文件和目录

  8. 8

    如何删除文件夹所有权?(Windows 7和Windows XP)

  9. 9

    如何以编程方式授予虚拟用户对文件夹(或文件)的权限

  10. 10

    Gnu / Linux命令列出所有有权访问一个文件夹的用户

  11. 11

    在不更改所有权的情况下授予用户访问文件夹的权限?

  12. 12

    如何以编程方式打开带有myapp文件夹的默认“文件”应用程序?

  13. 13

    如何以编程方式访问MATLAB的当前文件夹历史记录

  14. 14

    如何以编程方式访问MATLAB的当前文件夹历史记录

  15. 15

    如何以编程方式从mipmap文件夹加载图像?

  16. 16

    如何以编程方式处理文件夹系统中的音频文件?

  17. 17

    在SharePoint 2013中以编程方式创建文件夹

  18. 18

    如何在不拥有所有权的情况下获取文件夹的大小?

  19. 19

    如何以编程方式(使用PowerShell,WMI等)查找和打开文件夹的先前版本?

  20. 20

    管理员不再有权访问共享文件夹

  21. 21

    管理员不再有权访问共享文件夹

  22. 22

    将文件夹所有权从根更改为用户

  23. 23

    获取文件夹所有权并在Powershell中向域帐户添加完全权限?

  24. 24

    如何以编程方式更改文件夹中所有对象的状态?

  25. 25

    阻止Rsync更改排除列表的文件夹的所有权

  26. 26

    如何以编程方式在Windows Phone 8中创建相册文件夹

  27. 27

    如何以编程方式在Windows Phone 8中创建相册文件夹

  28. 28

    如何以编程方式取消嵌套Windows中的多个文件夹?

  29. 29

    如何以根用户身份访问文件夹?

热门标签

归档