0

我在 SharePoint Online 中使用JSLink检查用户权限时遇到了PermMaskctx.CurrentItem.PermMask

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

0x1b03c431aef - 编辑


0xb008431041 - 仅查看


0x1b03c4312ef - 贡献


0x1b03c5f1bff - 设计


0x7fffffffffffffff - 管理员


4

2 回答 2

1

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

每个位代表一个权限。

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

显示位

前高后低

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

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

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

SharePoint 有 37 种权限

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

目前 SharePoint 有37种不同的安全权限.. 不适合这32 位

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

SP.js 库(大多数页面上可用的标准)具有关于哪个 Permission 是哪个位数的信息

在开发者控制台中运行:

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

如果所有值相加,您将获得权限的高阶低阶整数值。

注意permLevelSP.PermissionKind.manageAlerts39 位

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

网络烫发面具

   _spPageContextInfo.webPermMasks.Low
   _spPageContextInfo.webPermMasks.High

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

指示当前用户当前页面上拥有的权限

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

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

要检查某人是否有权限,您必须计算(总和)值,然后对高位和低位整数进行二进制检查。

    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 );

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

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

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

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

我们让每个人都安装的免费试用版实际上是成熟的产品。
当他们购买许可产品时……它所做的只是在数据库中翻转一点。

J1 iSPT

于 2018-12-02T10:35:35.647 回答
0

这是权限的总和。

例如:

仅查看包括以下权限。

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

总和是 756052856897=0xb008431041

于 2018-03-07T04:17:41.750 回答