Побитовые операции над байтами (0-255) - это не шаманство, а основы информатики. В случае с правами - это способ упаковки матрицы доступа.
Существует две модели политики безопасности:
- Избирательная политика безопасности. Как правило, реализуется с помощью матрицы доступа (МД). В такой матрице строки - это объекты, права доступа к которым предоставляются, а столбцы - субъекты, которым предоставляется доступ. На пересечении - права, которые доступны (в примитивном случае - это просто разрешение "да/нет"). Знаменитые ACL (Access Control Lists) - это та же самая МД. В Seditio используется МД, где объект - некая область на сайте, а субъект - это группа пользователей. В ячейках один байт, в котором сжаты все привилегии. Такая модель относительно компактна. Если мы реализуем доступ на уровне каждого пользователя, и на уровне каждого элемента таблиц, и расширяем набор возможных прав, то размер матрицы увеличивается многократно (а именно, в N_пользвателей x N_строк раз). И значительно падает скорость алгоритмов авторизации (предоставления доступа).
- Полномочная политика безопасности. Как правило, каждый объект в системе (категория, страница, форум) имеет свою метку критичности (число или токен), которая определяет важность информации. Каждый субъект имеет уровень прозрачности (число или токен), который определяет ширину полномочий. Если коротко, то субъект может получить доступ к объекту, если его уровень прозрачности не ниже метки важности объекта. Другое правило гласит, что субъект может изменять объект, если его текущий уровень безопасности (число от 0 до уровня прозрачности) не выше метки важности объекта. Это позволяет строить строгую иерархию при движении данных.
Реализация комбинированных систем авторизации - не такая уж простая задача алгоритмически, особенно если учесть, что объектов на крупных сайтах сотни тысяч и миллионы. Так что маханием шашкой тут не обойдёшься.
Размышляя над этой проблемой, я однозначно отказался от расширения матрицы доступа (причина выше). Возможно "уточнение" имеющейся матрицы в индивидуальном порядке в качестве исключений (скажем, добавлять новые объекты и субъекты по явному требованию администратора), но тут тоже свои трудности с "массовой" обработкой данных для групп субъектов и объектов. Более интересной выглядит разработка системы, подобой той, что упоминает
Sergey, однако меня пугает её сложность и громоздкость.