We are aware of the issue with the badge emails resending to everyone, we apologise for the inconvenience - learn more here.
Forum Discussion
icefishandrew
2 years agoExplorer | Level 3
Get all shared links for a file
I have a .net app that needs to get all of the shared links for a particular file. The only way I can see to do this is to:
- Get a DropboxTeamClient with "team_info.read", "team_data.member", "groups.read" scopes
- Get the proper group id through TeamTeamRoutes.GroupsListAsync
- Get all of the members of the group through TeamTeamRoutes.GroupsMembersListAsync
- Cycle through the GroupMemberInfo getting the TeamMemberId, and then get a DropboxClient from DropboxTeamClient.AsMember(TeamMemberId)
- Get all of the shared links for that file, for that member, using SharingUserRoutes.ListSharedLinksAsync
I am an Admin and have approved this app during authorization. This all works well on my computer. If another user, who is not an Admin, tries to get an authorization token they receive an error message saying "You must be a team administrator to authorize this app. Either login to a Dropbox for Business admin account, or contact an existing administrator for your team."
How do I authorize a non-Admin user, or is there a better way to do this?
Thanks
An access token is just a string, so you could technically transmit it using whatever communication mechanism you wish. If you give the access token string, which was created by authorization from an admin, to a non-admin user, they could then technically run the same code to make a DropboxTeamClient, list groups, list members, operate as members, and list shared links.
That wouldn't be recommended though, as a matter of security, as a team-linked access token like that enables access that a non-admin doesn't have.
- Greg-DBDropbox Staff
When using any "team" scopes, the app can only be authorized by a team admin, because it would be connected to the entire team, not just a particular account.
If you just want to connect to a particular account, you can disable any team scopes, so that it can be authorized by non-admins. Access tokens/refresh tokens without the team scopes will be specific to the particular account (Business or not) and so would not require you to get a member ID and use AsMember; you would instead make a DropboxClient directly (not a DropboxTeamClient).
For reference, the ListSharedLinksAsync method requires the 'sharing.read' scope, which isn't a team scope. You can find more information on scopes in the OAuth Guide.
If you don't need to call any team endpoints (e.g., if you just need to call user methods, such as ListSharedLinksAsync), I recommend this solution instead for simplicity and security.
- icefishandrewExplorer | Level 3
Thanks Greg.
Is there a way to get all of the shared links that exist for a file, without using the DropboxTeamClient? If I only have a DropboxClient for the current user, I can only see the shared links for a file for that user, correct?
- Greg-DBDropbox Staff
Yes, if you have a DropboxClient you can call ListSharedLinksAsync to list the shared links for that file for only that user. If you only need to list all of the shared links for that file for that particular user, that would work.
If you need to be able to list all shared links for a file across all members of the team though, you would need to use the team scopes and start with the DropboxTeamClient, as that's how you would get access to all team member accounts, and call for each member. In that case, you don't need to have each member authorize the app themself though, as the single authorization from a team admin would grant access to the entire team.
About Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
5,877 PostsLatest Activity: 12 months agoIf you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X or Facebook.
For more info on available support options for your Dropbox plan, see this article.
If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!