Oznámení
Stala podminka pro vsechny dotazy
před 10 lety
- musa
- Člen | 30
Ahoj,
je nejak mozne v dibi zajistit aby se ke kazdemu dotazu (select, update, delete) doplnila podminka do where casti? Jde mi konkretne o db kde ma vetsina tabulek sloupec subsystem_id a ja po prihlaseni potrebuju aby uzivatel pracoval uz jen pouze v tomto subsystemu, zaroven bych ale nerad u kazdeho dotazu dopisoval „subsystem_id=%i', $subsys_id,“ (mozna to nejde z principu, nevim). V podstate se jedna o neco podobneho jako @where anotace u hibernate anotations nad tridou entity.
Napada me si podedit dibi a doplnit metodu squery(), ktera by prosla dotaz, nasla where a doplnila podminku uvedenou vysse a nasledne zavolala query(). Pripadne pro fluent rozhrani vytvorit sselect fungujici podobne. Dalsi reseni je tedy opravdu to u kazdeho dotazu dopsat. Ani jedno se mi ale moc nelibi.
Muze me v tomhle tedy dibi nejak pomoct?
před 10 lety
- Petr Motejlek
- Člen | 293
Tohle zní jako dost specifická záležitost a IMHO se extenzi nevyhneš…
před 10 lety
- musa
- Člen | 30
Nakonec sem to tedy vyresil drobnou upravou DibiTranslator.php tak aby bylo mozne si zaregistrovat callback naveseny uplne na konci metody translate, ktery ma jako parametr sql string a vraci ho upraveny dle potreby.
Subsystemy odlisuju pomoci persistentniho parametru (example.com/subsystem1) pokud neni uzivatel prihlasen. Pokud se prihlasi pak je ulozeno id subsystemu v session (v tu chvili je url uz jen kosmeticka, callback si id bere uz pouze ze session).
Callback ma pak k dispozici id subsystemu (ze session nebo url) a seznam tabulek, ktere maji sloupec subsystem_id. Kazdy dotaz je pak zkontrolovan a pokud pouziva nekterou ze „subsystemovych“ tabulek tak je doplnena podminka do WHERE filtrujici data jen pro tento subsystem (pro SELECT, UPDATE, REPLACE, DELETE). U INSERT se pak doplni vlozeni subsystem_id.