在SharePoint Online中混淆PermMask值

时间:2018-03-06 11:13:39

标签: sharepoint sharepoint-online jslink

我在SharePoint Online中使用 JSLink 时检测到 PermMask 值,以检查ctx.CurrentItem.PermMask

中用户的权限

不同权限的值与Microsoft的文档不匹配,知道这些值代表什么?或者他们必须转换成其他格式?对于管理员权限,我没有遇到这些值,其值为0x7ffffffffffffffff

0x1b03c431aef - 编辑

0xb008431041 - 仅查看

0x1b03c4312ef - Contribute

0x1b03c5f1bff - 设计

0x7fffffffffffffff - 管理员

2 个答案:

答案 0 :(得分:1)

webPermMasks是两个32位整数,指示用户具有哪些权限。

每个位代表一个权限。

(_spPageContextInfo.webPermMasks.High).toString(2)
(_spPageContextInfo.webPermMasks.Low).toString(2)

显示位

高低

在过去的好日子里,计算机只能使用8位,有人将其命名为Byte。
具有8位(8个权限),您只能从0到255计数

因此,要在8位CPU上存储更多的16位(0- 32768),则需要2个字节。

我们称它们为高字节低字节

SharePoint具有37种权限

当前的计算机已经从可以处理8位到16位的CPU演变为 32位

当前SharePoint具有 37 个不同的安全权限。 不适合那些 32位

就像很多月前一样,您需要两个32位值来编码权限
某些具有常识的Microsoft工程师将其命名为

SP.js库(大多数页面上可用的标准)包含有关哪个权限是哪个位数

的信息。

在开发者控制台中运行它:

for (var permLevelName in SP.PermissionKind.prototype) {
    if (SP.PermissionKind.hasOwnProperty(permLevelName)) {
        var permLevel = SP.PermissionKind.parse(permLevelName);
           console.info(permLevelName,permLevel);
        }
    }
}

注释permLevel 不是 ,它是位数

SP.PermissionKind.openItems是位数 6 ,因此值 2 ^ 6

如果您累加所有值,则会获得高阶低阶整数权限。

注意permLevel的{​​{1}}是第39位

这是高阶整数,因此值为 2 ^(39-31)

webPermMasks

SP.PermissionKind.manageAlerts

在两个32位整数中给您 64位(具有37个权限,只有少数几个以高阶使用)

指示当前用户当前页面

上具有什么权限

所有PermissionKinds(SP.PermissionsKnd。[名称])

注意:这是位数,而不是值!

要检查某人是否具有权限, 您必须计算(求和)值,然后 binary 检查高阶和低阶整数。

   _spPageContextInfo.webPermMasks.Low
   _spPageContextInfo.webPermMasks.High

在脚本中使用

SP库提供了用于检查各个级别的功能:

    viewListItems: 1
    addListItems: 2
    editListItems: 3
    deleteListItems: 4
    approveItems: 5
    openItems: 6
    viewVersions: 7
    deleteVersions: 8
    cancelCheckout: 9
    managePersonalViews: 10
    manageLists: 12
    viewFormPages: 13
    anonymousSearchAccessList: 14
    open: 17
    viewPages: 18
    addAndCustomizePages: 19
    applyThemeAndBorder: 20
    applyStyleSheets: 21
    viewUsageData: 22
    createSSCSite: 23
    manageSubwebs: 24
    createGroups: 25
    managePermissions: 26
    browseDirectories: 27
    browseUserInfo: 28
    addDelPrivateWebParts: 29
    updatePersonalWebParts: 30
    manageWeb: 31
    anonymousSearchAccessWebLists: 32
    useClientIntegration: 37
    useRemoteAPIs: 38
    manageAlerts: 39
    createAlerts: 40
    editMyUserInfo: 41
    enumeratePermissions: 63

使用未使用的空间(过去的故事)

SharePoint仅使用一小部分高阶整数。

但是数据库存储了所有32位...

当我们仍在构建SharePoint后端资料时,我们会将那些未使用的位用于我们自己的权限方案。

我们让所有人安装的免费试用版实际上是功能全面的产品。
当他们购买许可产品时,所做的只是翻转数据库中的一位。

J1 iSPT

答案 1 :(得分:0)

它是权限的总和。

例如:

查看仅包含以下权限。

ViewListItems = 1
ViewVersions = 64
CreateAlerts = 549755813888
ViewFormPages = 4096
CreateSSCSite = 4194304
ViewPages = 131072
BrowseUserInfo = 134217728
UseRemoteAPIs = 137438953472
UseClientIntegration = 68719476736
Open = 65536

总和是756052856897 = 0xb008431041