Сведения о вопросе

None

11:11, 28th August, 2020

Теги

php   permissions    

Реализация права в PHP

Просмотров: 474   Ответов: 10

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

<?php

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

$user = $editor;

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

?>



  Сведения об ответе

piter

17:08, 22nd August, 2020

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

<?php

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

    $user = $editor;

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

?>

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


  Сведения об ответе

DO__IT

13:20, 14th August, 2020

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


  Сведения об ответе

P_S_S

04:32, 9th August, 2020

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

<?php

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

    $user = $editor;

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

?>


  Сведения об ответе

PROGA

11:36, 29th August, 2020

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


  Сведения об ответе

KOMP

01:10, 15th August, 2020

Удивительно, это кажется лучшим способом сделать разрешения в CMS. Да? Нет?

Может быть, я никогда не делал этого таким образом. То, что я сделал, используется побитовыми операторами для хранения целой группы настроек "yes or no" в одном номере в одном столбце базы данных.

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

 ($editor | $admin)

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

 if ($user & $database_row['permissions']) {
       // display content
 } else {
       // display permissions error
 }


  Сведения об ответе

Chhiki

02:17, 5th August, 2020

(2 / 4) оценивается до 6,но 2 == 6 ложно.


  Сведения об ответе

ITSME

15:56, 18th August, 2020

@mk: (2/4) равно 6.


  Сведения об ответе

P_S_S

03:02, 18th August, 2020

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

$user = $editor;

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


  Сведения об ответе

LIZA

09:20, 3rd August, 2020

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


  Сведения об ответе

piter

14:39, 19th August, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться