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

Я очень заинтересован в написании класса, который поможет мне с разными разрешениями для разных пользователей (например, класс 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’.

0

Решение

Как только у вас есть $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'];

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

1

Другие решения

Других решений пока нет …