GitHub API v3: 判断用户是否是组织的所有者

7
如果你知道ID,就很容易确定用户是否是团队成员:点击此处
GET /teams/:id/members/:user

但是,如何轻松确定每个组织都有的特殊“Owners”团队的ID呢?
据我所知,唯一的方法是检索所有团队的完整列表(我假设可能是多个页面?),并浏览它们,直到找到一个名称为“Owners”的团队。
当然,这是可以做到的,但对于GitHub API来说,这是不寻常的不便。 ;)
值得一提的是,我尝试了以下方法(没有成功):
GET /orgs/:organization/teams?name=Owners # Lists all teams
GET /orgs/:organization/owners            # 404

简单来讲,我已确保使用与拥有相关组织的用户关联的令牌,因此不应该出现任何授权问题。

3个回答

5

目前没有简单的方法来检查用户是否属于所有者团队。但是感谢您提供这个酷炫的功能建议! ;)

一个巧妙的解决方法涉及执行仅允许所有者进行的非破坏性操作。如果该操作成功,那么经过身份验证的用户就是所有者。

例如,您可以尝试通过发送空的JSON哈希来编辑组织的设置:

$ curl -v -X PATCH -d '{}' https://api.github.com/orgs/:org?access_token=TOKEN

如果返回200状态码,则用户为所有者。404状态码表示相反的情况。
希望我们能在未来提供更优雅的解决方案。

太好了!这是比我目前所做的更好的选择。 - namuol
好像现在 memberships API 能满足我的需求了。我已经添加/接受了一个新答案。干杯~ - namuol
现在可以通过 role 过滤器查询管理员了,具体操作请参考 https://developer.github.com/v3/orgs/members/#members-list。 - iElectric

4
作为一种替代而更快速的解决方案,您可以使用成员 API来获取有关已验证用户所属组织的成员身份的详细信息。
请求很简单:GET /user/memberships/orgs?state=active,响应如下:
[
  {
    "state": "active",
    "role": "admin",
    "organization": {
      "login": "octocat",
      "id": 1,
    },
    "user": {
      "login": "defunkt",
      "id": 3,
      "gravatar_id": "",
      "type": "User",
      "site_admin": false
    }
  },
  {
    "state": "active",
    "role": "member",
    "organization": {
      "login": "invitocat",
      "id": 2,
    },
    "user": {
      "login": "defunkt",
      "id": 3,
      "gravatar_id": "",
      "type": "User",
      "site_admin": false
    }
  }
]

需要注意的重要字段是role;我们只希望有"role": "admin"

我不确定这是否保证用户是Owners成员,但它确实表明他们拥有组织的管理权限。


这很不错(请注意它已经有大约7年的历史了)。但是你能帮我重现这个行为吗?我正在努力让认证对于给定的用户(即我)起作用。也许你可以提供一个shell命令来获取正确的输出? - David Butler

-1

不幸的是,在查询团队成员之前,必须找到所有者团队的ID,这涉及浏览可能分页的团队列表... - namuol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接