Dropbox API, 如何查看每个团队成员的文件夹权限?

Dropbox API, How to see each team member's folder permissions?

我刚开始使用 Dropbox API,我想访问每个团队成员的文件夹权限并将其放入数据库,但我不知道在哪里可以找到这些信息。我能够访问每个成员的文件夹,并且可以看到每个文件夹的名称,但看不到用户拥有的每个文件夹的权限。我该怎么做?

这是我目前的情况:

public MainPage()
{
     this.InitializeComponent();
     var task = Task.Run((Func<Task>)MainPage.Run);
     task.Wait();
}


static async Task Run()
{
      using (DropboxTeamClient DBTeamClient = new DropboxTeamClient("MY ACCESS KEY"))
      {
            //get all the dropbox members
            var members = await DBTeamClient.Team.MembersListAsync();
            //loop through all members ordered by email alphabetical
            foreach (var member in members.Members.OrderBy(a => a.Profile.Email))
            {
                 //get each user
                 var userClient = DBTeamClient.AsMember(member.Profile.TeamMemberId);
                 //get each user's file information
                 var list = await userClient.Files.ListFolderAsync(string.Empty);
                 //loop through the list of file and show permissions on folders
                 foreach (var item in list.Entries.OrderBy(b => b.PathDisplay))
                 {
                     //only display folder information
                     if (item.IsFolder)
                     {
                         //find out the user's permissions to this folder here?
                         //then I will output user information and permissions to a db
                     }
                 }
            }
      }
}

我是不是用错了方法?任何指导表示赞赏,提前致谢!

感谢 Greg 的评论和 post 在 Dropbox 上的帮助,我得以解决我的问题。这是他的解决方案:

“当您像这样使用 FilesUserRoutes.ListFolderAsync 列出文件和文件夹时,您将列出成员的 Dropbox 文件夹的内容,其中将包括两个共享文件夹(它们具有特定的权限级别)作为他们的私人文件夹(他们没有特定的权限级别,因为它只是他们的文件夹)。对于共享文件夹,将设置返回的 FolderMetadata.SharingInfo,但它不包含有关该用户权限级别的信息在那个文件夹中。(顺便说一下,确保你也实现了 ListFolderContinueAsync,以确保你可以在使用 ListFolderAsync 时检索所有结果。查看 ListFolderAsync 文档以获取更多信息。)

相反,如果您想列出用户有权访问的共享文件夹,包括他们在每个文件夹中的访问级别,您应该使用 SharingUserRoutes.ListFoldersAsync。同样,确保你也实现了 SharingUserRoutes.ListFoldersContinueAsync,因为这个接口也是分页的。每个返回的 SharedFolderMetadata 将列出用户的访问类型和权限。

这是一个小例子:

var actionsToCheck = new Dropbox.Api.Sharing.FolderAction[] { Dropbox.Api.Sharing.FolderAction.EditContents.Instance, Dropbox.Api.Sharing.FolderAction.InviteEditor.Instance };
var list = await userClient.Sharing.ListFoldersAsync(actions: actionsToCheck);  // actions can optionally be supplied to check the permissions the user has for specific actions

foreach (var item in list.Entries)
{
    Console.WriteLine(item.SharedFolderId);
    Console.WriteLine(item.PathLower);  // only set if the folder is mounted
    Console.WriteLine(item.AccessType);
    Console.WriteLine(item.Permissions);
}

// and so on, iterating over pages from userClient.Sharing.ListFoldersContinueAsync if list.Cursor is set

希望这对您有所帮助!

我希望其他人和我一样觉得这很有用。