Каков результат этого C# побитового ИЛИ?
Я пытаюсь проверить разрешения для пользователей SharePoint в C#, и я наткнулся на следующий код, который, кажется, работает:
isGranted = spweb.DoesUserHavePermissions(userlogin, SPBasePermissions.EmptyMask | SPBasePermissions.ViewPages);
Первый аргумент - пользователь, чтобы проверить разрешение. Второй аргумент - это разрешение проверить, есть ли у пользователя.
Мой вопрос: каков результат побитовых или между разрешениями emptymask и viewpages? Какое разрешение это на самом деле проверяет?
3 ответа
Поскольку EmptyMask
определяется как ноль, результат совпадает с передачей SPBasePermissions.ViewPages
без EmptyMask
:
[Flags]
public enum SPBasePermissions
{
EmptyMask = 0×0000000000000000,
...
}
Перечисление имеет Flag
атрибут, который указывает, что вы можете комбинировать значения, используя побитовые операторы.
На самом деле, нет смысла объединять EmptyMask
(который равен 0) с другим значением, как 0 | X
всегда равно X
, Просто используйте другое значение.
Это проверяет оба разрешения. Разрешения являются побитовыми флагами.
Я не знаю фактических значений, но скажите, что Пустая Маска: 01000000, а ViewPage - 00100000 - тогда ИЛИ будет 01100000 - так что вы получите их вместе.
Итак, если вы хотите проверить, что у пользователя есть разрешение ViewPage, вы можете взять значение ИЛИ и его значение вместо значения для ViewPage, и если оно> 0, то вы знаете, что у вас есть разрешение.