混淆 SharePoint Online 中的 PermMask 值

Confusing PermMask values in SharePoint Online

我在 SharePoint Online 中使用 JSLink 时遇到了 PermMask 值,用于从 ctx.CurrentItem.PermMask

不同权限的值与微软的文档不匹配,知道这些值代表什么吗?还是必须将它们转换成其他格式?我没有遇到过这些值,期望管理员权限的值为 0x7fffffffffffffff

0x1b03c431aef - 编辑


0xb008431041 - 仅查看


0x1b03c4312ef - 贡献


0x1b03c5f1bff - 设计


0x7fffffffffffffff - 管理员


它是权限的总和。

例如:

仅查看包括以下权限。

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

总和为756052856897=0xb008431041

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

每一位代表一个权限。

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

显示位

高低

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

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

我们称它们为 High-ByteLow-Byte

SharePoint 有 37 种权限

现在的计算机已经从可以处理 8 位到 16 位的 CPU 发展到 32 位

目前 SharePoint 有 37 个不同的安全权限.. 不适合那些 32 位

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

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 对于 SP.PermissionKind.manageAlerts 第 39 位

这是高位整数,所以值为2^(39-31)

webPermMasks

   _spPageContextInfo.webPermMasks.Low
   _spPageContextInfo.webPermMasks.High

为您提供 两个 32 位整数中的 64 位(具有 37 个权限,只有少数在高阶中使用)

表示当前用户当前页面上的权限 ]

所有 PermissionKinds (SP.PermissionsKnd.[name])

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

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

    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

在脚本中使用

SP 库提供了检查各个级别的函数:

  SP.PageContextInfo.get_webPermMasks().has( [bitnumber] );

  SP.PageContextInfo.get_webPermMasks().has( SP.PermissionKind.enumeratePermissions );

使用未使用的 space(过去的故事)

SharePoint 使用高阶整数中的少量位。

然而数据库存储了所有 32 位...

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

我们让大家安装的免费试用版实际上是成熟的产品。
当他们购买许可产品时..它所做的只是在数据库中翻转一位。

J1 iSPT