Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.044 c
3-1080392592
Oleon
2004-03-27 16:03
2004.04.25
Как сохранять настройки в последнем QuantumGrid?


3-1080214290
viktor
2004-03-25 14:31
2004.04.25
SQL


1-1081253610
Shnurok
2004-04-06 16:13
2004.04.25
Отображение формул химических соединений


14-1080594690
Andy BitOff
2004-03-30 01:11
2004.04.25
Asm --> Delphi


4-1077474261
Opilki_Inside
2004-02-22 21:24
2004.04.25
Как это реализовано??





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский