Каков результат этого 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, то вы знаете, что у вас есть разрешение.

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