Я пытался сделать это несколько раз, но безуспешно. После прочтения эта почта я снова заинтересовался этим. Так может ли кто-нибудь сказать мне, почему следующее не работает?
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if ( $user == ($editor | $admin) ) {
echo "Test";
}
?>






Прошло много времени с тех пор, как я использовал PHP, но я предполагаю, что это сработает:
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if ( ($user == $editor) || ($user == $admin) ) {
echo "Test";
}
?>
Используйте оператор побитового ИЛИ (|) для установки битов, используйте оператор И (&) для проверки битов. Ваш код должен выглядеть так:
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if ( $user & ($editor | $admin) ) {
echo "Test";
}
?>
Если вы не понимаете двоичный код и не понимаете, что именно делают побитовые операторы, вам следует изучить его. Вы поймете, как это сделать намного лучше.
(2 | 4) оценивается как 6, но 2 == 6 ложно.
@mk: (2 | 4) оценивается как 6.
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if (user == $editor || $user == $admin) {
echo "Test";
}
Awesome, this seems like the best way to do permissions in a CMS. Yes? No?
Может, я никогда так не делал. Я использовал побитовые операторы для хранения целого набора настроек «да или нет» в виде одного числа в одном столбце базы данных.
Я думаю, что для разрешений этот способ будет хорошо работать, если вы хотите хранить разрешения в базе данных. Если кто-то хочет опубликовать какой-то контент и хочет, чтобы его видели только администраторы и редакторы, вам просто нужно сохранить результат
($editor | $admin)
в базу данных, затем, чтобы проверить это, сделайте что-нибудь вроде
if ($user & $database_row['permissions']) {
// display content
} else {
// display permissions error
}
На мой взгляд, это плохо масштабируется. На самом деле я не пробовал использовать его в крупномасштабном проекте, но CMS звучит слишком сложно для использования.
Это всегда зависит от того, что вам нужно. Если вы уже знакомы с Zend Framework, я бы поддержал предложение Zend_Acl / _Auth, сделанное ранее. Но имейте в виду, что каждый фреймворк, вероятно, имеет аналогичный компонент.
Еще одна вещь, которая приходит на ум, - это LiveUser. Мне тоже очень нравится с ним работать.
Я думаю, вы можете делать практически все, и хотя ваш подход выглядит очень простым, он также ограничен, поскольку (через все эти if ()) вы собираетесь поместить много ACL-логики прямо в середину вашего приложения. Это не самое лучшее, что нужно сделать, чтобы сделать его простым и расширяемым. ;)
Я использовал это в отчетах об ошибках, и он работает довольно хорошо. Что касается прав пользователей, это должно работать очень хорошо - у вас может быть несколько столбцов для каждого разрешения пользователя в вашей базе данных или один столбец уровня пользователя в вашей базе данных. Выбери этот вариант.