【问题标题】:Artifactory user update removes adminArtifactory 用户更新删除了管理员
【发布时间】:2017-06-03 14:29:20
【问题描述】:

考虑以下对 Artifactory REST API 的 POST:

curl -f -u admin:password \
     -X POST \
     -H 'Content-Type: application/json; charset=UTF-8' \
     -d '{ "groups": ["oldgroup", "newgroup"] }' \ 
     http://localhost/artifactory/api/security/users/targetuser

此请求确实确保用户是“旧组”和“新组”的成员,但另外它会删除用户的管理员权限(如果他们有的话):例如。更新后{ "admin": true }更改为{ "admin": false }

如果用户最初是管理员,似乎需要额外传递{ "admin": true },以避免更新的这种奇怪的副作用:

curl -f -u admin:password \
     -X POST \
     -H 'Content-Type: application/json; charset=UTF-8' \
     -d '{ "admin": true, "groups": ["oldgroup", "newgroup"] }' \ 
     http://localhost/artifactory/api/security/users/targetuser

这似乎不是真正的更新。这是一个错误吗?我错过了什么吗?

此外,我想知道这是否与我最初传递的 'Content-Type' 标头有关,因为我使用的是完整的 application/vnd.org.jfrog.artifactory.security.User+json,但更改为 application/json 具有相同的结果。

我可以查看我是否使用 PUT 方法来创建或替换用户,但这是 POST 请求,并且似乎没有像我预期的那样工作。


Artifactory REST API 文档和我的研究:

【问题讨论】:

    标签: artifactory


    【解决方案1】:

    作为 Artifactory,在获取更新 REST API 命令后,无法判断您打算更改哪些参数,例如在您的情况下更改组,它将接受您的输入并将其应用于用户。这意味着 Admin 的值将设置为 false,因为这是该字段的默认值。如果您希望为用户保存现有配置,我建议对用户详细信息进行获取请求 > 将其保存到 JSON 文件 > 将其编辑为所需值 > 将其发布到 Artifactory。这样您就不会更改您打算保留的值。

    【讨论】:

    • 感谢您的回答!我原本也是这么想的。但是,如果您查看 RST API 的文档,您会注意到它们有两条更新用户对象的途径:PUTPOST。 - 创建或替换用户:PUT /api/security/users/{userName} - 更新用户:POST /api/security/users/{userName} 创建或替换的注释清楚地指出:“缺失值将设置为默认值”但是,对于更新:“更新 Artifactory 中的现有用户提供的用户详细信息”因此,我认为更新工作不正确。
    • 确实,我可以看到文档似乎也缺少“更新用户”的此信息。这确实令人困惑,会要求更改它并将这一行添加到“更新用户”中。谢谢指出
    • 实时更新,文档相应更新。
    • 我刚刚注意到文档的更新;谢谢,至少这从文档的角度澄清了混乱。它仍然提出了 POST 路由的必要性问题,并且它与 PUT 路由不同,因为它们几乎相同(除了 POST - 我假设 - 要求引用的用户已经存在)。我之前还打算补充一点,我基本上是按照您在我的申请中提出的建议做的,但这样做的必要性最初让我失望了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多