Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизPHP + Права доступа Найти похожие ветки
← →
Undert © (2004-04-02 11:03) [0]Помогите пожалуйста идеями.
Дело такое: есть некое дерево, к каждой ветке которого назначается какой-то доступ. К примеру если назначили доступ к какой-то ветке, то все субветки тоже доступны.
Сейчас данные прав доступа хранятся в виде таблицы:
пользователь ветка
а механизм определения следующий:
task - ветка
task_access_cache - обычный массивfunction has_access2task($uid,$task) {
GLOBAL $task_access_cache;
if ($task=="") {
return false;
} else {
if ($task_access_cache["$uid,$task,1"]=="1") return true;
if ($task_access_cache["$uid,$task,1"]=="2") return false;
$r = mysql_query ("select * from access where uid="$uid" and tid="$task" and depotid="-1"");
$rn = mysql_numrows ($r);
if ($rn > 0) {
$f = mysql_fetch_array($r);
$task_access_cache["$uid,$task,1"] = 1;
return true;
} else {
$task_access_cache["$uid,$task,1"] = 2;
return false;
}; //if
}; //if
}; //func
function has_access($uid, $tid) {
GLOBAL $task_access_cache;
if ($task_access_cache["$uid,$tid"]=="1") return true;
if ($task_access_cache["$uid,$tid"]=="2") return false;
$task_access_cache["$uid,$tid"] = 2;
$r = mysql_query ("select * from tasks where id=$tid");
$f = mysql_fetch_array ($r);
if (has_access2task($uid,$tid)) {
$task_access_cache["$uid,$tid"] = 1;
return true;
};
$parent = $f[parentid];
while ($parent!=0) {
$r = mysql_query ("select * from tasks where id=$parent");
$f = mysql_fetch_array ($r);
$parent = $f[parentid];
if (has_access2task($uid,$f[id])) {
$task_access_cache["$uid,$tid"] = 1;
return true;
break;
};
}; //while
}; //func
Работает я бы сказал это не совсем быстро. Как можно оптимизировать?
← →
Undert © (2004-04-02 11:08) [1]uid - Пользователь
tasks - ветки/подветки
← →
Calm © (2004-04-02 11:59) [2]когда назначешь права на ветку, то в таблицу прав пиши сразу и права на подветки. Оно конечно избыточно слега, зато быстро.
У меня в БД дерево примерно из 2000 веток и пользователей порядке 200, средняя глубина дерева 4-7. Все просто летает.
Правда БД - MS SQL Server. Но, думаю, что MySQL тоже не затормозит.
← →
Undert © (2004-04-05 10:37) [3]
> Calm ©
Слушай, а как ты проверку производишь ?
Конечно то что ты подсказал - увеличило скорость, но все равно тормозит... :(
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c