cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Announcements
What’s new: end-to-end encryption, Replay and Dash updates. Find out more about these updates, new features and more here.

Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

ParentSharedFolderId is Null when checking permissions

ParentSharedFolderId is Null when checking permissions

bmilinski
Helpful | Level 6
Go to solution

I previously made a program that goes through my entire team's DropBox permissions and creates a report from the data. It tells me their name, permissions for the current file/folder, the name of the current file/folder, and is supposed to share the parent folder's name. However, I am running into the issue of the "ParentSharedFolderID" being null even when I know from checking that the specified file/folder is in a parent folder. What could be causing this?

 

Here is my code:

private async void ButtonDebug_Click(object sender, EventArgs e)
{
ButtonDebug.Enabled = false;

//use dropbox client with access token from app console
using (DropboxTeamClient DBTeamClient = new DropboxTeamClient("MYCLIENTIDHERE"))
{
//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))
{
int count = 0;
//get each user
var userClient = DBTeamClient.AsMember(member.Profile.TeamMemberId);
//actions to check
var actionsToCheck = new FolderAction[] { FolderAction.EditContents.Instance, FolderAction.InviteEditor.Instance };
//get each user's file information
var list = await userClient.Sharing.ListFoldersAsync(actions: actionsToCheck); // actions can optionally be supplied to check the permissions the user has for specific actions
//loop through the list of file and show permissions on folders
foreach (var item in list.Entries)
{
int length = item.AccessType.ToString().Length - 32 - 2;
System.Diagnostics.Debug.WriteLine("");
System.Diagnostics.Debug.WriteLine(member.Profile.Name.DisplayName);
System.Diagnostics.Debug.WriteLine(item.Name);
System.Diagnostics.Debug.WriteLine(item.AccessType.ToString().Substring(32, length));
string parentName = "N/A";
if (item.ParentSharedFolderId != null)
{
try
{
var parentSharedFolderMetadata = await userClient.Sharing.GetFolderMetadataAsync(item.ParentSharedFolderId);
System.Diagnostics.Debug.WriteLine(parentSharedFolderMetadata.Name);
parentName = parentSharedFolderMetadata.Name;
}
catch (DropboxException ex)
{
parentName = "N/A";
}
}
System.Diagnostics.Debug.WriteLine(count + "");
count++;
}
System.Diagnostics.Debug.WriteLine(count + " total folders");
}
}
ButtonDebug.Enabled = true;
}

1 Accepted Solution

Accepted Solutions

bmilinski
Helpful | Level 6
Go to solution

I was able to solve my issue by using the following to retrieve the folder's meta data:

 

var itemMetaData = await userClient.Sharing.GetFolderMetadataAsync(item.SharedFolderId);

 

After that I got the parent folder's meta data and name from this:

 

var parentSharedFolderMetadata = await userClient.Sharing.GetFolderMetadataAsync(itemMetaData.ParentSharedFolderId);
parentName = parentSharedFolderMetadata.Name;

View solution in original post

2 Replies 2

Greg-DB
Dropbox Staff
Go to solution

I see you're calling Sharing.ListFoldersAsync to list the shared folders in the account. (By the way, make sure you check ListFoldersResult.Cursor to see if there are more entries to retrieve, in which case you should call back to ListFoldersContinueAsync.)

 

The ParentSharedFolderId property will only be set if the folder itself is contained inside another shared folder. Are you sure you're seeing this absent for folders insider other shared folders? I ask because you only said "the specified file/folder is in a parent folder", but not specifically that the parent folder is shared.

 

If that's not working properly though, please share the unexpected output you're seeing so we can take a look. You can open an API ticket if you'd prefer to share privately.

 

If the folder is in a non-shared parent folder and you want the path of that parent, you can retrieve it from the PathLower property. Note that that will only be present if the folder is mounted though.

bmilinski
Helpful | Level 6
Go to solution

I was able to solve my issue by using the following to retrieve the folder's meta data:

 

var itemMetaData = await userClient.Sharing.GetFolderMetadataAsync(item.SharedFolderId);

 

After that I got the parent folder's meta data and name from this:

 

var parentSharedFolderMetadata = await userClient.Sharing.GetFolderMetadataAsync(itemMetaData.ParentSharedFolderId);
parentName = parentSharedFolderMetadata.Name;

Need more support?
Who's talking

Top contributors to this post

  • User avatar
    bmilinski Helpful | Level 6
  • User avatar
    Greg-DB Dropbox Staff
What do Dropbox user levels mean?