Autor Zpráva
JohnyBB
Profil *
Zdravím Vás,
mám stránku, kde vypisuji vybrané záznamy z databáze na základě uživatelského oprávnění - 'ID uživatele', 'pracovní skupiny' či 'role' plus ještě navíc možnost zadání parametru = nuly pro všechny členy pracovní skupiny, všechny uživatele, atp. Když jsem se nad tím zamýšlel, zjistil jsem, že by klauzule 'WHERE' byla několikařádková, což nepovažuji za efektivní a později čitelné.

Pro vyřešení oprávnění jsem si napsal tuto funkci vracející hodnotu 'true', pokud se shodují záznamy z databáze se sessions, v opačném případě 'false':
// funkce pro zjištění oprávnění přihlášeného uživatele, vrátí booleanovskou hodnotu
 function decide_permission($for_workgroup, $for_role, $for_user, $mode, $enabled) {
  // pokud je uživatel aktivní
  if ($enabled == "1") {
   // pokud je mód pro výpis prac. skupina nebo už. role
   if ($mode == "WR") {
    if ((($for_workgroup == $_SESSION['s_workgroup']) && ($for_role == $_SESSION['s_role'])) ||
        (($for_workgroup == "0") && ($for_role == $_SESSION['s_role'])) ||
        (($for_workgroup == $_SESSION['s_workgroup']) && ($for_role == "0"))) {
     return true;
    }
   }
   elseif ($mode == "U") {
    if (($for_user == $_SESSION['s_id_user']) || ($for_user == "0")) {
     return true;
    }
   }
  }
 }


Napadlo mě, že by se možná dala využít v dotazu na databázi, ale to zřejmě není možné. Poddotaz jsem zavrhnul, příliš by situaci nevyřešil. A co třeba dočasná tabulka? Jedno z mých řešení.
Rád bych znal Vaše názory na to, jak vyřešit problematiku složitějšího selektování dat (třeba nějaké filtry). Samozřejmě, mohl jsem to vyřešit podmínkou, ale data budu následně stránkovat, takže potřebuji mít dotaz, který vhodné záznamy již vybere.
Díky.
tiso
Profil
JohnyBB:
1. keď už využívaš vo funkcii return, tak by si mal vždy vracať hodnotu, nie len niekedy.
2. bežne sa to robí tak, že sa oprávnenia užívateľa a dáta s nimi súvisiace uložia do $_SESSION, kontroluje sa úroveň práv pre daný objekt/modul/tabuľku a potom sa až vykoná nejaká akcia s tým objektom.
JohnyBB
Profil *
tiso
1. Ano, nemám tam všechny návratové hodnoty, to je pravda.. doplním :)
2. Mám to takto udělané, ale ta tabulka je pro všechny uživatele (všech oprávněních, skupin,..) a já vybírám, který záznam můžu pro dotyčného vypsat.

Zajímalo by mě, jak se filtrují data, kde je velké množství podmínek a parametrů a zda by v mém případě pomohla dočasná tabulka nebo by to šlo řešit lépe..
JohnyBB
Profil *
Podařilo se mi vytvořit ten divoký dotaz na databázi. Myslíte si, že je to "normální dotaz", nebo spíš prasárna? :) S databázemi moc nepracuji, tak nevím, co je v normě a co ne.. díky..

$row = MySQL_Query("SELECT * FROM ".$prefix."help WHERE (
 ((mode_help = 'WR') AND (for_role <= ".$_SESSION['s_role'].") AND (for_workgroup <= ".$_SESSION['s_workgroup'].")) OR
 ((mode_help = 'WR') AND (for_role <= ".$_SESSION['s_role'].") AND (for_workgroup = '0')) OR
 ((mode_help = 'WR') AND (for_role = '0') AND (for_workgroup <= ".$_SESSION['s_workgroup'].")) OR
 ((mode_help = 'U') AND ((for_user = ".$_SESSION['s_id_user'].") OR (for_user = '0'))))
 ORDER BY date_help DESC");

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: