Как разрешить одно разрешение, а не другое, используя побитовую систему?

Я очень заинтересован в написании класса, который поможет мне с разными разрешениями для разных пользователей (например, класс ACL.) Я искал отличный метод, и битовая операция выпала!

Я нашел хорошую статью Как написать систему разрешений, использующую битовые и побитовые операции в PHP. В статье объясняется, как обрабатывать разрешения с помощью побитовой операции.

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

так что если права установлены так:

<?php

    $perms = array(
        'can_post' => 1,
        'can_comment' => 2,
        'can_edit' => 4,
        'can_delete' => 8
    );


   $user_perms = 2;    

//CONDITION #1
if ($user_perms & $perms['can_comment']) {
    /* He/She has permission to do this */
} else {
    /* He/She doesn't have permission */
}


//CONDITION #2
if ($user_perms & $perms['can_post']) {
    /* He/She has permission to do this */
} else {
    /* He/She doesn't have permission */
}

?>

так выше CONDITION #1 показать работу отлично, и комментарии должны быть разрешены, но //CONDITION #2 не должно быть разрешено, потому что у пользователя нет прав на публикацию!

Мой вопрос, как разрешить пользователю только комментировать, но не оставлять сообщения? для публикации у вас будет '001', а для комментирования у вас будет '010'.

1 ответ

Решение

Как только у вас есть $perms Определенный массив, вы можете создать свои собственные карты из него:

// can comment and post but not edit or delete:
$poster = $perms['can_post'] | $perms['can_comment'];

// can edit and delete, but not comment or post:
$janitor = $perms['can_delete'] | $perms['can_edit'];

Вы можете комбинировать любое количество разрешений с | оператор для построения значений разрешений.

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