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
希望这对您有所帮助!
我希望其他人和我一样觉得这很有用。
我刚开始使用 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
希望这对您有所帮助!
我希望其他人和我一样觉得这很有用。