Nem találtam a tárgyban jelölt funkcióra api-t. Lényeg hogy a drupál adatbázisától eltérő adatbázisban tárolunk adatokat. Az ott tárolt adatok közül kell szűrni, ott elérhető adatok (területi elhelyezkedés) , alapján.
De a jogok kiadásakor csak azokat a user-eket szeretném listázni akik rendelkeznek a modul álltal definiált perm-el.
Csopottagságot le tudok kérdezni, de remélem hogy van egyszerübb, jobb(!) megoldás is.
Köszönöm előre is a segítséget
Fórum:
Én sem találtam
Én sem találtam rá API-t, de attól még lehet hogy van.
Ha users táblát összekapcsolod a users_roles táblával akkor megkapod hogy egy felhasználó mely
csoportokba tartozik.
De akkor még nem tudod, hogy a csoportnak milyen jogai vannak. Ezért az előző kettőhöz (pontosabban a users_roles-hez) hozzákapcsolod még a permission táblát.
Viszont az 1 bizonyos perm-re való szűrés nem lesz zökkenő mentes, hiszen a permission.perm mező egy stringben tárolja a csoport összes jogosultságát, VesszőSzóköz határolóval.
Problémát jelenthet továbbá az is, hogy a string eleje és vége nem tartalmazza a határolót.
Az alábbi függvények tesztelése eredményre vezethet:
find_in_set
instr
locate
Továbbá a határoló gondokra a
concat
A példa alapján a find_in_set() csak a vesszőt tekinti határolónak.
Most hogy próbálom
Most hogy próbálom összerakni az SQL mondatot, rájöttem hogy az elöbb néhány dolgot nem vettem számításba. :-)
Ez így önbagában nem elég
fontos észrevételezni hogy:
$perm = ' ' . $perm . ','
Egy minden helyzetben helyesen működő kód ettől sokkal bonyolultab lenne. Mert:
1) Egy felhasználó minden esetben bele tartozik 1 csoportba. Vagy "anonymous user" vagy "authenticated user" de ezt a tagságot a users_roles tábla nem tárolja. Tehát ha azt a saját modulod által definiált perm-et megkapja az "authenticated user" csoport akkor a fenti lekérdezés üres rekord halmazt ad vissza. (RIGHT JOIN-nal meg NULL érték lesz az ur.uid helyén)
2)Kisebbik gond, hogy az egyes számú felhasználó (users.uid = 1) gondolkodás nélkül megkap minden jogot.
3)Mindig kifelejtek valamit. Majd ide írom. :-)
Köszönöm!
Nagyon szépen köszönöm!
A megoldás mellett különösen a "hangosan" gondolkodást!
Ez így működik, többre nincs szükségem.
BeGa
BeGa
pici megjegyzés
Nem ástam bele nagyon a témába, de én ezt csinálnám?
Itt ugye ha van NULL érték, akkor az azt jelenti, hogy vagy az anonimous, vagy/és mindenki rendelkezik azzal a joggal, tehát értelmetlen a lista. A user-t meg úgy is érdemes a user_load-al betölteni, tehát elég az uid ;)
A bejegyzés a helyes sql használat miatt született {} és %s használata. (tudom, hogy tudjátok, de hátha lesz olyan aki nem.)
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Gyúrok vazze
Akkor megpróbálom összegyúrni a két megoldást :-)
Engedelmetekkel.
A lekérdezés eredményével egy $form 'select' elemet töltök fel, így nálam:
SELECT DISTINCT u.uid, u.name
FROM {users_roles} as ur
LEFT JOIN {permission} as p
ON( p.rid = ur.rid AND LOCATE(" %s,", CONCAT(" ", p.perm, ",")) > 0 )
LEFT JOIN {users} as u on ( u.uid = ur.uid )';
- A like megoldás nem ad pontos választ , részleges átfedések is lehetnek.
- a Distinct akkor kell - mint nálam pl -, amikor több csoport is megkapja ugyanazt az engedélyt.
BeGa
BeGa
Zárolt felhasználók
Eszembe jutott hogy mit akartam írni a hármas ponthoz. :-)
A zárolt felhasználók nem biztos hogy kellenek abba a választó listába.
users.status mező.