Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.03 c
1-1081253210
baromir
2004-04-06 16:06
2004.04.25
Как мне взять часть имени файла??? (+)


4-1077345889
Костя
2004-02-21 09:44
2004.04.25
ExitWindowsEx


6-1077115256
Svart
2004-02-18 17:40
2004.04.25
работа с SNMP


14-1080634026
Фикус
2004-03-30 12:07
2004.04.25
Вопрос по Excel


1-1081148745
GodHappy
2004-04-05 11:05
2004.04.25
Компонент наследник TCustomListView




   Наверх