Реализация разрешений в PHP - PullRequest
       54

Реализация разрешений в PHP

8 голосов
/ 20 августа 2008

Я пытался сделать это несколько раз, но безуспешно. Прочитав этот пост , я заинтересовался этим снова. Так может кто-нибудь сказать мне, почему следующее не работает?

<?php

$guest = 1;
$editor = 2;
$admin = 4;

$user = $editor;

if( $user == ($editor | $admin) ) {
    echo "Test";    
}

?>

Ответы [ 10 ]

11 голосов
/ 20 августа 2008

Используйте битовый оператор ИЛИ (|) для установки битов, используйте оператор И (&) для проверки битов. Ваш код должен выглядеть так:

<?php

    $guest = 1;
    $editor = 2;
    $admin = 4;

    $user = $editor;

    if( $user & ($editor | $admin) ) {
        echo "Test";    
    }

?>

Если вы не понимаете двоичный файл и точно, что делают битовые операторы, вам следует изучить его. Вы поймете, как сделать это намного лучше.

6 голосов
/ 20 августа 2008

Чтобы не изобретать велосипед, почему бы не взглянуть на ACL / системы аутентификации, такие как Zend ACL и Zend Auth ? Оба могут использоваться независимо от Zend Framework в целом. Управление доступом - сложная ситуация, поэтому полезно хотя бы посмотреть, как это делают другие системы.

2 голосов
/ 25 августа 2008

Я использовал это в сообщениях об ошибках, и это работает довольно хорошо. Что касается полномочий пользователей, они должны работать очень хорошо - у вас может быть несколько столбцов для каждого разрешения пользователя в вашей базе данных или один столбец уровня пользователя в вашей базе данных. Перейти на эту опцию.

2 голосов
/ 20 августа 2008

Прошло много времени с тех пор, как я использовал PHP, но я предполагаю, что это будет работать:

<?php

    $guest = 1;
    $editor = 2;
    $admin = 4;

    $user = $editor;

    if( ($user == $editor) || ($user == $admin) ) {
        echo "Test";    
    }

?>
1 голос
/ 20 августа 2008

Круто, похоже, это лучший способ сделать разрешения в CMS. Да? Нет * * 1002

Может быть, я никогда так не делал. Я использовал побитовые операторы для хранения целой связки настроек «да или нет» в одном числе в одном столбце в базе данных.

Полагаю, для разрешений этот способ будет работать хорошо, если вы хотите сохранить разрешения в базе данных. Если кто-то хочет опубликовать какой-либо контент и хочет, чтобы его увидели только администраторы и редакторы, вам просто нужно сохранить результат

 ($editor | $admin)

в базу данных, затем, чтобы проверить это, сделайте что-то вроде

 if ($user & $database_row['permissions']) {
       // display content
 } else {
       // display permissions error
 }
1 голос
/ 20 августа 2008
$guest = 1;
$editor = 2;
$admin = 4;

$user = $editor;

if (user == $editor || $user == $admin) {
    echo "Test";
}
1 голос
/ 20 августа 2008

@ mk: (2 | 4) оценивается как 6.

1 голос
/ 20 августа 2008

(2 | 4) оценивается как 6, но 2 == 6 неверно.

0 голосов
/ 25 августа 2008

Это всегда зависит от того, что вам нужно. Если вы уже знакомы с Zend Framework, я бы поддержал предложение Zend_Acl / _Auth, которое было сделано ранее. Но имейте в виду, что каждый фреймворк имеет одинаковый компонент.

Другая вещь, которая приходит на ум, это LiveUser . Мне тоже очень нравится с этим работать.

Я думаю, что вы можете делать практически все, и хотя ваш подход выглядит очень простым, он также ограничен, поскольку (через все эти if ()) вы будете помещать большую часть ACL-логики прямо в середину своего приложение. Что не самая лучшая вещь, чтобы сделать ее простой и расширяемой. ;)

0 голосов
/ 20 августа 2008

По-моему, это плохо масштабируется. На самом деле я не пытался использовать его в крупномасштабном проекте, но CMS кажется слишком сложным, чтобы использовать это на.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...