ACL list основанный на permission bits

sector119

Guest
ACL list основанный на permission bits

мог бы кто-то показать пример как это реализовывается?

есть некий набор действий, например пользователь может:
1) добавлять, удалять пользователей
2) добавлять группы пользователей
3) добавлять пользователей не только в свою группу
4) добавлять информацию в раздел X
5) добавлять информацию в раздел Y
6) редактировать уже добавленную информацию владельцем которой он не является
7) и т.д.

как реализовывается проверка используя permission bits можно ли пользователю выполнять определенное действие или нет!?

Спасибо!
 

tony2001

TeaM PHPClub
на этом принципе основана система управления уровнем вывода сообщений об ошибках в РНР.
[m]error_reporting[/m] - смотри тут примеры.
 

sector119

Guest
tony2001, спасибо большое!

if ($user_bitmasksum & $action_bitmask == $action_bitmask) {
*** access granted ***
}

собственно и вся проверка выходит :)
 

tony2001

TeaM PHPClub
да, это оно.
не знаю как тебе, а лично мне очень удобно для уровней использовать константы.
как доп. фича - они доступны во всех областях видимости.

кстати, вот этого:
PHP:
if ($user_bitmasksum & $action_bitmask) {
//access granted
}
вполне хватит.
 

Stm

Новичок
если действие требует наличия всех $action_bitmask то не хватит
 

tony2001

TeaM PHPClub
не понял комментария.
для нескольких масок надо несколько проверок, а я говорю об одной.
 

Stm

Новичок
это если какое то действие требует нескольких прав, например есть два права: добавить в группу, удалить из группы
действие по перемещению из одной группы в другую потребует наличия обоих прав, при это маска одна
if( права_польз & добавить|удалить == добавить|удалить )
 

tony2001

TeaM PHPClub
во-первых, твой вариант не работает:
PHP:
$aaa=1;
$bbb=2;
$priviliges=0; // !!!
if ($priviliges & $aaa|$bbb == $aaa|$bbb)
	echo "TRUE";
else 
	echo "FALSE";
а во-вторых, я говорил о проверке 1-й привилегии с одной маской.
а ты складываешь 2 (две) маски и сравниваешь с суммой.
 

Stm

Новичок
ты говорил что:

if ($user_bitmasksum & $action_bitmask) {
//access granted
}

вполне хватит.

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

ну а на счет во первых, как говорил мой знакомый "скобкой программу не испортишь" :), правда это он про оптимизирующий компилятор говорил.

if( права_польз & (добавить|удалить) == (добавить|удалить) )
 

tony2001

TeaM PHPClub
>а я лишь сказал что это эквивалентно коду приведенному автором
>только при условии что $action_bitmask степень 2-х
это подразумевалось само собой
 

sector119

Guest
Автор оригинала: tony2001
да, это оно.
не знаю как тебе, а лично мне очень удобно для уровней использовать константы.
как доп. фича - они доступны во всех областях видимости.
tony2001, покажите пожалуйста несколько названий констант уровней доступа! мне интересно в каком стиле их принято называть :)

Спасибо!
 

sector119

Guest
да, и еще! где лучше хранить информацию CONSTANT = bits в файле и потом его подключать используя require? или может быть лучше в таблице хранить?

acl_bits:
const integer,
bits integer,
description text

чем мне удобнее показался вариант с таблицей, так это тем, что при добавлении пользователя можно будет выводить чек-боксы с именем константы и значением bits и удобно будет указывать права доступа пользователю! не придется дублировать информацию в таблице и файле!

или может это можно как-то лучше сделать, как-то более удобно?
 

tony2001

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

у тебя часто меняется список возможных привилегий?
если нет - зачем его хранить в базе?
 

sector119

Guest
permission bits - может быть любым числом или только числом кратным 2 ?
 

netdog

net @
а где мона поподробнее про это дело все прочитать, че-то я не дорубаю ;)
 
Сверху