Запутанные значения PermMask в SharePoint Online

Я столкнулся со значениями PermMask при использовании JSLink в SharePoint Online для проверки разрешений пользователя из ctx.CurrentItem.PermMask

Значения для разных разрешений не совпадают с документацией Microsoft, есть идеи, что представляют эти значения? или их нужно конвертировать в какой-то другой формат? Я не сталкивался с этими значениями ожидают разрешения администратора, значение которого 0x7fffffffffffffff

0x1b03c431aef - Редактировать


0xb008431041 - только просмотр


0x1b03c4312ef - способствовать


0x1b03c5f1bff - Дизайн


0x7fffffffffffffff - Admin


1 ответ

Решение

Это сумма разрешений.

Например:

Просмотр только включает в себя ниже разрешения.

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

Таким образом, для хранения большего количества 16 бит (0- 32768) на 8-битном процессоре вам нужно 2 байта.

Мы назвали их старшим байтом и младшим байтом

SharePoint имеет 37 типов разрешений

Современные компьютеры превратились из процессоров, которые могут обрабатывать от 8 до 16 бит до 32 бит

В настоящее время SharePoint имеет 37 различных разрешений безопасности.. которые не вписываются в эти 32 бита

Как и много лун назад, для кодирования разрешений нужны ДВА 32-битных значения.
Какой-то инженер Microsoft со здравым смыслом назвал значение High и Low

Библиотека 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

Дает вам 64 бита в двух 32-битных целых числах (с 37 разрешениями только немногие используются в старшем порядке)

с указанием прав доступа текущего пользователя на текущей странице

Все виды разрешений (SP.PermissionsKnd.[Имя])

Примечание: это номер бита, а не значение!

Чтобы проверить, есть ли у кого-то права доступа, вы должны вычислить (суммированное) значение, а затем выполнить двоичную проверку по целым числам высокого и низкого порядка.

    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

Другие вопросы по тегам