Как разрешить одно разрешение, а не другое, используя побитовую систему?
Я очень заинтересован в написании класса, который поможет мне с разными разрешениями для разных пользователей (например, класс 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'];
Вы можете комбинировать любое количество разрешений с |
оператор для построения значений разрешений.