我对使用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
}
}
}
}
}
我以错误的方式走这条路吗?任何指导表示赞赏,在此先感谢!
答案 0 :(得分:0)
由于Greg的评论并在Dropbox上发帖,所以我能够解决我的问题。这是他的解决方案:
”当您使用FilesUserRoutes.ListFolderAsync这样列出文件和文件夹时,您将列出成员的Dropbox文件夹的内容,其中将包括共享文件夹(它们在其中具有特定的权限级别)以及私有文件夹(因为它们只是文件夹,所以它们没有特定的权限级别。)对于共享文件夹,将设置返回的FolderMetadata.SharingInfo,但在该文件夹中不包含有关该用户的权限级别的信息。(由这样,请确保同时实现ListFolderContinueAsync,以确保在使用ListFolderAsync时可以检索所有结果。有关更多信息,请查看ListFolderAsync文档。)
相反,如果要列出用户有权访问的共享文件夹(包括每个文件夹的访问级别),则应使用SharingUserRoutes.ListFoldersAsync。同样,请确保也实现了SharingUserRoutes.ListFoldersContinueAsync,因为此接口也是分页的。每个返回的SharedFolderMetadata将列出用户的AccessType和权限。
这是一个小例子:
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
希望这会有所帮助!”
我希望其他人能像我一样有用。