从Confluence REST API解释权限

3
我可以使用PythonConfluenceAPI从Confluence REST API获取权限列表:
p = api.get_space_information(space_key, expand="permissions")['permissions']

我收到了一个包含操作和主题信息的字典列表。但是API提供的信息与Confluence中显示的权限存在不匹配之处:
  • API中有一些操作在浏览器中不存在(更新博客文章)。
  • 浏览器中有一些操作在API中不存在(空间导出、空间管理员、邮件删除)。
  • API列表中有一些条目没有指定任何操作,并且这些条目经常重复多次。
我真正想要的是一个空间管理员列表。希望有人能解释一下API给我的权限结构。
2个回答

3
像您一样,我也无法使用似乎已完全删除的RPC API。如果您想获取空间管理员列表,有几种方法可用。
简单的方法是使用 /rest/api/group/confluence-administrators/member 路由,它将返回 Confluence 管理员成员列表,这些成员自动成为空间管理员。
如果您没有很多用户,还可以在管理面板上安装 Space Permissions Handler add-on,它将为您提供一个API,其中包含给定用户的所有权限,格式与旧的 getSpacePermissionSets 返回的格式相同。

api debug

但是如果你有很多用户需要逐个检查,这可能会很麻烦,也不是最有帮助的事情。我创建了一个Confluence插件,使我能够使用Java API,并利用SpaceDirectoryEntity的getAdmins方法。
单一的终点很简单明了:
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/{key}")
public Response getAdmins(@PathParam("key") String key) {
  Space space = spaceManager.getSpace(key);
  if (space == null) {
    return Response.status(Response.Status.NOT_FOUND).build();
  }

  List<User> admins = spaceManager.getSpaceAdmins(space);
  List<Object> out = new ArrayList<Object>();

  for (User admin: admins) {
      Map<String, String> item = new HashMap<String, String>();
      item.put("fullName", admin.getFullName());
      item.put("name", admin.getName());
      item.put("email", admin.getEmail());
      out.add(item);
  }

  Gson gson = new Gson();
  String json = gson.toJson(out);
  return Response.ok(json).build();
}

如果提供一个有效的空格键,则会给出此类型的响应:
[
  {
    "name": "admin",
    "fullName": "admin",
    "email": "admin@hehe.com"
  },
  {
    "name": "admin2",
    "fullName": "admin2",
    "email": "admin2@hehe.com"
  }
]

如果您想要我开源这个插件,可能需要更多的工作来清理它,只需告诉我您是否有兴趣。


@Nedatchelder,请告诉我是否有遗漏的内容。 - Preview

0

很遗憾,关于REST API和通过它获取空间管理员权限的方法,目前没有适当的文档。不过,我相信您可以使用旧的JSON-RPC API来获取空间权限列表。它可以通过以下方式访问:

http://<confluence-url>/rpc/json-rpc/confluenceservice-v2/getSpacePermissionSets

它技术上返回以下响应:

[
  {
    "type": "SETSPACEPERMISSIONS",
    "spacePermissions": [
      {
        "type": "SETSPACEPERMISSIONS",
        "userName": null,
        "groupName": "confluence-administrators"
      }
    ]
  },
  {
    "type": "EXPORTSPACE",
    "spacePermissions": [
      {
        "type": "EXPORTSPACE",
        "userName": null,
        "groupName": null
      },
      {
        "type": "EXPORTSPACE",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "EXPORTSPACE",
        "userName": null,
        "groupName": "confluence-administrators"
      }
    ]
  },
  {
    "type": "SETPAGEPERMISSIONS",
    "spacePermissions": [
      {
        "type": "SETPAGEPERMISSIONS",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "SETPAGEPERMISSIONS",
        "userName": null,
        "groupName": "confluence-administrators"
      }
    ]
  },
  {
    "type": "REMOVEMAIL",
    "spacePermissions": [
      {
        "type": "REMOVEMAIL",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "REMOVEMAIL",
        "userName": null,
        "groupName": "confluence-administrators"
      },
      {
        "type": "REMOVEMAIL",
        "userName": null,
        "groupName": null
      }
    ]
  },
  {
    "type": "REMOVEBLOG",
    "spacePermissions": [
      {
        "type": "REMOVEBLOG",
        "userName": null,
        "groupName": null
      },
      {
        "type": "REMOVEBLOG",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "REMOVEBLOG",
        "userName": null,
        "groupName": "confluence-administrators"
      }
    ]
  },
  {
    "type": "EXPORTPAGE",
    "spacePermissions": [
      {
        "type": "EXPORTPAGE",
        "userName": null,
        "groupName": null
      },
      {
        "type": "EXPORTPAGE",
        "userName": null,
        "groupName": "confluence-administrators"
      },
      {
        "type": "EXPORTPAGE",
        "userName": null,
        "groupName": "confluence-users"
      }
    ]
  },
  {
    "type": "REMOVEATTACHMENT",
    "spacePermissions": [
      {
        "type": "REMOVEATTACHMENT",
        "userName": null,
        "groupName": null
      },
      {
        "type": "REMOVEATTACHMENT",
        "userName": null,
        "groupName": "confluence-administrators"
      },
      {
        "type": "REMOVEATTACHMENT",
        "userName": null,
        "groupName": "confluence-users"
      }
    ]
  },
  {
    "type": "CREATEATTACHMENT",
    "spacePermissions": [
      {
        "type": "CREATEATTACHMENT",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "CREATEATTACHMENT",
        "userName": null,
        "groupName": null
      },
      {
        "type": "CREATEATTACHMENT",
        "userName": null,
        "groupName": "confluence-administrators"
      }
    ]
  },
  {
    "type": "VIEWSPACE",
    "spacePermissions": [
      {
        "type": "VIEWSPACE",
        "userName": null,
        "groupName": "confluence-administrators"
      },
      {
        "type": "VIEWSPACE",
        "userName": null,
        "groupName": null
      },
      {
        "type": "VIEWSPACE",
        "userName": null,
        "groupName": "confluence-users"
      }
    ]
  },
  {
    "type": "EDITBLOG",
    "spacePermissions": [
      {
        "type": "EDITBLOG",
        "userName": null,
        "groupName": null
      },
      {
        "type": "EDITBLOG",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "EDITBLOG",
        "userName": null,
        "groupName": "confluence-administrators"
      }
    ]
  },
  {
    "type": "REMOVEPAGE",
    "spacePermissions": [
      {
        "type": "REMOVEPAGE",
        "userName": null,
        "groupName": "confluence-administrators"
      },
      {
        "type": "REMOVEPAGE",
        "userName": null,
        "groupName": null
      },
      {
        "type": "REMOVEPAGE",
        "userName": null,
        "groupName": "confluence-users"
      }
    ]
  },
  {
    "type": "REMOVECOMMENT",
    "spacePermissions": [
      {
        "type": "REMOVECOMMENT",
        "userName": null,
        "groupName": null
      },
      {
        "type": "REMOVECOMMENT",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "REMOVECOMMENT",
        "userName": null,
        "groupName": "confluence-administrators"
      }
    ]
  },
  {
    "type": "EDITSPACE",
    "spacePermissions": [
      {
        "type": "EDITSPACE",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "EDITSPACE",
        "userName": null,
        "groupName": "confluence-administrators"
      },
      {
        "type": "EDITSPACE",
        "userName": null,
        "groupName": null
      }
    ]
  },
  {
    "type": "COMMENT",
    "spacePermissions": [
      {
        "type": "COMMENT",
        "userName": null,
        "groupName": "confluence-users"
      },
      {
        "type": "COMMENT",
        "userName": null,
        "groupName": "confluence-administrators"
      },
      {
        "type": "COMMENT",
        "userName": null,
        "groupName": null
      }
    ]
  }
]

如果您没有任何限制并且能够对数据库运行查询,您也可以使用以下查询:

SELECT s.SPACENAME, u.username FROM SPACES s 
 JOIN SPACEPERMISSIONS p ON s.SPACEID = p.SPACEID
 JOIN user_mapping u ON p.PERMUSERNAME = u.user_key 
  WHERE p.PERMTYPE = 'SETSPACEPERMISSIONS';

上述查询返回您实例中所有空间的空间管理员列表。


谢谢。我在寻找使用Python访问JSON-RPC API的示例时遇到了麻烦。当我尝试使用请求进行发布时,会得到404错误。它应该在我的维基百科上可用吗?https://openedx.atlassian.net/wiki/display/OXA/Open+edX+Answers - Ned Batchelder
啊,你在使用Atlassian Cloud,我不认为SOAP在云版本中可用。好吧,那就看看这个REST API是否适合你(https://docs.atlassian.com/confluence/REST/latest/#space-space)。请注意,如果你只需要它一次,也许可以向Atlassian支持团队查询是否可以为你运行该查询 :-) - Saleh Parsa
那个REST API是我开始的地方,也是我得到奇怪的半填充权限列表的地方... 不管怎样,还是谢谢。 - Ned Batchelder
不用担心,Ned。我很想帮忙,但是很遗憾,API文档仍然不完整,而且特别是对于有所有限制的云服务,资源还不够。 - Saleh Parsa

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