Побитовое разложение числа. Организация доступа

Romantik

TeaM PHPClub
Побитовое разложение числа. Организация доступа

Приветствую.

Храня в базе DEC число и используя decbin()
я получаю биты для организации доступа, но вот в чем проблема:
если кол-во разрядов 8, т.е учитывать нужно 8 разрядов, а
число DEC доступа
16 (0100 0000) decbin() возвращает 100 000,
8 (0010 0000) decbin() - 10 000,
что не соответсвует алгоритму.
Как можно решить эту проблему наилучшим способом?
Заранее благодарен.

ЗЫ. последний вариант добавлять нули.
 

Bloody

Guest
Наилучший вариант - не использовать перевод, а использовать побитовую маску через &. Например:

$a=10; // 01010000
$b=$a&2; //01000000, или проще !=0
$c=$a&8; //00010000, или проще, тоже !=0

Ничего придумывать не надо!
 

"Малыш & ..."

Guest
2 Romantik
А можно чуть подробнее про то, как ты ограничивать доступа (и, кстати, к чему?) с помощью такого метода делать хочешь?
Тоже думал сделать распределение доступа к базе при помощи битовой маски, но ничего умного, к сожалению, в голову не пришло.. :(
 

Bloody

Guest
2 Малыш & ...

Я делал админку с разделением прав (например, кому-то разрешено изменять список администраторов и их права, кому-то список каталогов, кому-то добавлять документы к сайту...) так:
В таблице mysql хранилось поле permit содержащее целое число. В самом скрипте определялись константы, например:
define('ALLOW_USERS_EDIT', 1), define('ALLOW_SMTH', 2), ..., 4), ..., 8) и т.д. А затем, достав из муsql permit для конкретного юзера, делаю такое сравнение:

if($permit&ALLOW_USERS_EDIT){
//разрешить редактировать список пользователей
}
...
if($permit&ALLOW_SMTH){
//разрешить еще что нибудь
}

И т.д.
 

"Малыш & ..."

Guest
2 Bloody
У меня немного более сложная задача - есть база, в которой находятся документы. И есть много (около 700) юзеров, которые будут документы смотреть. Там будут приказы, распоряжения, отчеты, докладные.. ну, в ообщем, много разного хлама, доступ к которому надо распеделять. Документ может быть разрешен к просмотру конкретному юзеру, а может и на отдел отписываться (отделов около 20)..
Сейчас остановился на варианте - добавлять в базу для каждого документа символьное поле, куда через "," занести коды юзеров, которым можно с документом работать.
Ну, и представь себе, общий приказ какой-нибудь - 700 трехзначных идишников в строку писать...
Думал, что у Romantik'а похожая задача и он подскажет, как битовую маску правильно сделать для распределения доступа. Хочется "красиво" проблему решить.
 

camka

не самка
Автор оригинала: "Малыш & ..."
Сейчас остановился на варианте - добавлять в базу для каждого документа символьное поле, куда через "," занести коды юзеров, которым можно с документом работать.
Ну, и представь себе, общий приказ какой-нибудь - 700 трехзначных идишников в строку писать...
Предлагаю для начала ознакомиться с реляционной моделью и только потом забацать табличку Пермишн

Permission
-------------
User_ID
Resource_ID
Mask(если надо)
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: "Малыш & ..."
Сейчас остановился на варианте - добавлять в базу для каждого документа символьное поле, куда через "," занести коды юзеров, которым можно с документом работать.
RTFM: первая нормальная форма
 
Сверху