如何通过gspread Google API获取共享用户邮箱及权限列表?
如何通过gspread获取谷歌表格的共享用户及权限列表
可以通过gspread提供的list_permissions()方法获取目标谷歌表格的所有共享权限信息,该方法会返回实时的权限列表(包括后续其他编辑者新增的共享用户),你可以将结果整理成字典或分组列表用于核对。
具体实现代码
在你现有的代码基础上,添加以下逻辑即可:
import gspread as gs gc = gs.service_account_from_dict(JSON_KEY) # 创建表格并配置工作表(你的原有代码) spreadsheet = gc.create('new_spreadsheet') ws = spreadsheet.add_worksheet(title='new_worksheet', rows='100', cols='12') spreadsheet.del_worksheet(spreadsheet.worksheet('Sheet1')) std_writers = ['email_1@email.com', 'email_2@email.com', 'email_3@email.com', 'email_4@email.com'] std_viewers = ['email_5@email.com', 'email_6@email.com', 'email_7@email.com', 'email_8@email.com'] for writer in std_writers: spreadsheet.share(email_address=writer, perm_type='user', role='writer') for viewer in std_viewers: spreadsheet.share(email_address=viewer, perm_type='user', role='reader') # ------------------- 获取共享权限的核心代码 ------------------- # 获取所有共享权限条目 permissions = spreadsheet.list_permissions() # 整理为「邮箱:权限」的字典 shared_users_dict = {} for perm in permissions: # 过滤非用户类型的共享(比如域共享) if perm.get('type') == 'user' and 'emailAddress' in perm: shared_users_dict[perm['emailAddress']] = perm['role'] # 打印核对结果 print("所有共享用户及对应权限:") for email, role in shared_users_dict.items(): print(f"- {email}: {role}") # 可选:按权限分组整理 writers_group = [p['emailAddress'] for p in permissions if p.get('role') == 'writer' and p.get('type') == 'user'] readers_group = [p['emailAddress'] for p in permissions if p.get('role') == 'reader' and p.get('type') == 'user'] print("\n编辑权限用户列表:", writers_group) print("查看权限用户列表:", readers_group)
关键说明
list_permissions()返回的每个权限条目是一个字典,核心字段包括:emailAddress:共享目标的邮箱(仅用户类型共享存在该字段)role:权限角色,常见值为writer(编辑)、reader(查看)type:共享类型,比如user(单个用户)、domain(域共享)
- 该方法会返回实时的共享状态,即使其他拥有编辑权限的用户新增了共享,调用此方法也能获取到最新结果。
- 确保你的服务账号拥有目标表格的所有者或管理权限,否则可能无法获取完整的权限列表。
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

