You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量获取Bitbucket仓库的所有用户权限列表?

获取Bitbucket仓库用户权限详细列表的解决方案

一、纠正API使用误区

你调用的 GET /2.0/workspaces/<workspace_id>/permissions/repositories?pagelen=100 接口其实已经包含完整的权限信息,只是返回结构是按权限条目分页:每个条目里的user字段对应权限拥有者,permission字段是具体权限级别(如read、write、admin),repository字段对应所属仓库。你需要遍历所有分页结果才能拿到全量数据。

二、两种高效获取方案

方案1:基于工作空间权限接口批量获取

这个接口会返回所有仓库的所有权限条目,只需处理分页即可:

  1. 初始请求:curl -u <username>:<app-password> "https://api.bitbucket.org/2.0/workspaces/<workspace_id>/permissions/repositories?pagelen=100"
  2. 检查响应中的next字段,若存在则继续请求该URL,直到next为空
  3. 合并所有响应中的values数组,即可得到所有「用户-仓库-权限」的对应关系

方案2:按仓库维度逐个查询(适合精确整理单仓库权限)

如果需要按仓库维度整理权限,可以先获取所有仓库列表,再逐个查询权限:

  1. 获取全量仓库:curl -u <username>:<app-password> "https://api.bitbucket.org/2.0/workspaces/<workspace_id>/repositories?pagelen=100",同样处理分页拿到所有仓库的slug
  2. 对每个仓库调用:curl -u <username>:<app-password> "https://api.bitbucket.org/2.0/repositories/<workspace_id>/<repo_slug>/permissions/users?pagelen=100",获取该仓库的所有用户权限
  3. 将结果按仓库或用户维度汇总整理

三、自动化脚本示例(Python)

手动处理分页效率低,用脚本自动化完成:

import requests
import time
from requests.auth import HTTPBasicAuth

# 替换为你的信息
WORKSPACE_ID = "你的工作空间ID"
USERNAME = "Bitbucket用户名"
APP_PASSWORD = "Bitbucket应用密码"  # 需开启Workspace membership和Repositories权限

def fetch_all_paginated_data(url):
    all_data = []
    while url:
        resp = requests.get(url, auth=HTTPBasicAuth(USERNAME, APP_PASSWORD))
        resp.raise_for_status()
        data = resp.json()
        all_data.extend(data.get("values", []))
        url = data.get("next")
        time.sleep(0.5)  # 避免触发API速率限制
    return all_data

# 获取所有权限条目
permission_entries = fetch_all_paginated_data(
    f"https://api.bitbucket.org/2.0/workspaces/{WORKSPACE_ID}/permissions/repositories?pagelen=100"
)

# 整理为用户维度的权限字典
user_perms = {}
for entry in permission_entries:
    user_name = entry["user"]["display_name"]
    user_email = entry["user"]["email"]
    repo_name = entry["repository"]["name"]
    perm_level = entry["permission"]

    if user_name not in user_perms:
        user_perms[user_name] = {"email": user_email, "repos": []}
    user_perms[user_name]["repos"].append({"repo": repo_name, "permission": perm_level})

# 输出整理后的结果
for user, details in user_perms.items():
    print(f"用户: {user} ({details['email']})")
    print("权限仓库列表:")
    for repo_info in details["repos"]:
        print(f"- {repo_info['repo']}: {repo_info['permission']}")
    print("---")

四、注意事项

  • 必须使用Bitbucket应用密码(而非账号密码),应用密码需开启对应权限
  • Bitbucket API默认每小时限制600次请求,脚本中加入短延迟可避免触发限制
  • 如果需要包含团队权限,可额外调用/permissions/groups接口补充数据

内容的提问来源于stack exchange,提问作者Dani Diaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:46:03