获取角色定义的可靠方法

Reliable way to get role definition

获取预定义角色(如 reader、admin)的角色定义 ID 的最佳方法是什么?

我正在尝试将文件夹配置为让成员只有读取权限。为此,我将删除现有的成员角色分配并向他们添加 reader 角色。 SharePoint REST API 要求我提供角色定义 ID,但我找不到可靠的方法。

看来我可以通过名称获得它_api/web/roledefinitions/getbyname('Read'),但我担心如何处理非英语语言环境的情况。我希望可以按类型 _api/web/roledefinitions/getbytypekind(2) 搜索它,但我无法让它工作。它给我一个错误 Cannot find resource for the request getbytypekind.

另外,是否可以删除默认角色定义?

您可以通过

获取角色定义列表
https://xxxx.sharepoint.com/_api/Web/RoleDefinitions

然后可以通过id获取具体的角色(如read),所以我们不需要关心locale问题:

https://xxxx.sharepoint.com/_api/Web/RoleDefinitions(1073741826)

角色列表和id:

FullControl(Web/RoleDefinitions(1073741829))
Design(Web/RoleDefinitions(1073741828))
Edit(Web/RoleDefinitions(1073741830))
Contribute(Web/RoleDefinitions(1073741827))
Read(Web/RoleDefinitions(1073741826))
Limited Access(Web/RoleDefinitions(1073741825))
System.LimitedView(Web/RoleDefinitions(1073741926))
System.LimitedEdit(Web/RoleDefinitions(1073741927))
Create new subsites(Web/RoleDefinitions(1073741924))
View Only(Web/RoleDefinitions(1073741925))

我们可以使用默认角色或自定义自己的角色,所以我认为微软不需要提供API来删除内置角色。

虽然我们也可以使用 getbytype 方法,但是角色类型值的列表对用户来说不是很友好。(更多信息请参见下面的 link)

https://msdn.microsoft.com/en-us/library/office/dn531432.aspx#bk_RoleDefinitionCollectionGetById https://msdn.microsoft.com/en-us/library/office/dn531432.aspx#bk_RoleDefinitionCollectionGetByType

It seems like I can get it by name _api/web/roledefinitions/getbyname('Read'), but I'm concerned how to handle the case of non-English locale

没错,SP.RoleDefinition.name property could vary per locale, so retrieving role definition by role type is definitely more reliable in this regard, SP.RoleDefinitionCollection.getByType method可以用在这里,例如:

/_api/web/roledefinitions/getByType(<roletypeid>)

其中 roletypeid 对应于 SP.RoleType enumeration