我遇到了一个问题,我正在使用WSAPI将项目添加到一个人的TeamMemberships集合中。当我向这个集合中添加一个项目时,我得到了“你没有权限查看Project XXXXXXXXXX”,但我甚至都没有尝试查看该项目。
当我将该项目的_ref放在URL栏中时,我也得到同样的错误,所以我肯定没有权限查看这个项目。
我的问题是:我是否需要查看者访问集合中的所有项目才能将项目添加到该集合中?
答案 0 :(得分:1)
通常,更新集合需要编辑者访问集合中的所有项目。观众访问是不够的。
在修改TeamMemberships集合时,集合更新的特定情况下,编辑器访问权限不足,因为此操作需要管理权限,最低限度为项目管理员权限。 由于工作区管理员可以访问工作区中的所有项目,因此我们无需考虑该方案。
以下是详细信息。让我们从更一般的集合更新开始,例如缺陷套件上的缺陷收集。
假设有两个兄弟项目Child1和Child2。 某些用户A具有Child1的编辑权限,并且无权访问Child2。 假设有:
缺陷套件/ defectuite / 444,在Child1中有一个空缺陷集合,
Child1中的两个缺陷/缺陷/ 111和/缺陷/ 222,
Child2中的缺陷/缺陷/ 333
用户A使用此curl命令成功地将/ defect / 111添加到缺陷套件中:
curl --header "zsessionid:_abc123" -H "Content-Type: application/json" -d"{\"CollectionItems\":[{\"_ref\":\"/defect/1111\"}]}" https://rally1.rallydev.com/slm/webservice/v2.0/defectsuite/444/defects/add
接下来,对项目Child1和Child2具有编辑权限的其他用户B将/ defect / 333添加到/ defectuite / 444。现在,此缺陷套件上的缺陷集合包含两个缺陷,其中一个缺陷存在于用户A的访问之外。
接下来,用户A尝试使用类似于上面的curl命令添加/ defect / 222(存在于编辑器A具有完全访问权限的Child1项目中),并收到错误:
“无法向工件添加工件”,“无法读取:未授权读取对象缺陷333”
如果此时用户A被授予查看者对Child2项目的访问权限并再次尝试,则错误将有所不同:
“无法向工件添加工件”,“无法设置缺陷值:无权更新:DefectSuite 444”
要更新包含两个项目缺陷的集合,用户A必须是两者中的编辑器。将此用户的权限升级到Child2项目中的编辑器级别可以使此操作成功完成。
现在让我们考虑TeamMemberships更新中的两个场景。
“无法将工件添加到集合”,“无法为团队成员资格设置值:未授权更新:用户777”
请注意,此时用户A尝试更新其团队成员的/ user / 777在此工作空间中的任何项目中都没有成员资格。此命令成功更新了/ user / 777
的TeamMembershipcurl --header "zsessionid:_abc123" -H "Content-Type: application/json" -d"{\"CollectionItems\":[{\"_ref\":\"/project/111\"}]}" https://rally1.rallydev.com/slm/webservice/v2.0/user/777/teammemberships/add
返回的JSON包括:
"TeamMembers": {"_rallyAPIMajor": "2", "_rallyAPIMinor": "0", "_ref": "https://rally1.rallydev.com/slm/webservice/v2.0/Project/111/TeamMembers"
接下来,其他一些用户B使用/ project / 333更新/ user / 777的teammembership集合,而用户A无权访问。
接下来,用户A尝试使用/ project / 222更新/ user / 777的更新teammembership集合,其中用户A是项目编辑器。
这会导致错误:
“无法将工件添加到集合中”,“无法读取:未授权读取对象项目333”
此时,如果给予用户A查看者甚至/ project / 333的编辑者权限,则相同的curl命令将失败,并显示以下错误:
“无法将工件添加到集合”,“无法为团队成员资格设置值:未授权更新:用户777”
在这种情况下,将需要/ project / 111,/ project / 222和/ project / 333的项目编辑者权限。