Egy kis gondom akadt saját modul fejlesztés közben. Léteznek felhasználók különböző csoportokban. Az egyik ilyen csoport azért felel hogy küldjenek be esemény tartalomtípusokat. Az ő jogaik jelenleg a "tartalmak hozzáférése", esemény beküldése, illetve saját események szerkesztése. A feladat az lenne hogy ezek a felhasználók addig tudják szerkeszteni a saját tartalmukat amíg nem lett közzétéve a tartalom. Alapból úgy kerülnek fel a tartalmak hogy rejtettek, majd a szerkesztők csoportból valaki átállítja közzétettre. Szóval míg nem lettek közzétéve, aborossal, Yorkkal konzultáltam a fejlesztés során mivel nem vagyok még elég jártas a modulfejlesztésben. Az alábbi kóddal próbálkoztam/próbálkoztunk eddig:
function umvpevent2_access($op, $node) { if ($op == 'update' || $op == 'delete') { if ($node->status == 1 && !user_access('administer nodes')) { return FALSE; } } }
Drupal verzió:
Fórum:
Ezzel a kóddal sosem lesz szerkesztés/törlés füled
Ugyanis ez sosem ad vissza TRUE-t (vagy azzal egyenértékűt), hanem mindig csak FALSE-t (vagy azzal egyenértékűt).
ez szerintem nem fog menni
Node státusz alapján nem tudsz jogosultságokat osztani, mert...
Nem közzétett tartalomhoz szerintem csak az fog tudni hozzáférni, akinek tartalom adminisztrálási joga van, de más is próbálkozott hasonlóval, mint te. A lehetséges megoldás a Node modul módosítása, majd a megfelelő hozzáférés szabályozás elkészítése újra, különben az egész olyan, mintha az oldalad széttenné a lábát...
félreértés van...
...de lehet, hogy részemről (:
Én úgy értelmezem az eredeti kérdést, hogy a beküldő a saját tartalmát szeretné módosítani a későbbiekben, az általad idézett linken viszont két külön szerkesztőről van szó.
Ha én értettem jól, akkor viszont nem egyértelmű számomra, hogy mi a probléma. Az, hogy csak addig kéne tudniuk szerkeszteni a tartalmat, amíg nem közzétett, és utána már nem?
--
Csonka Gergely
http://cheppers.com
Így van, jól értelmezed, a
Így van, jól értelmezed, a felhasználó csak addig tudja szerkeszteni a saját maga által beküldött tartalmat amíg nem közzétett utána már ne tudja.
--
Borsa Péter
https://peterborsa.eu
nem hiszem, hogy félreértettem
Nézd meg a node_access() függvény forráskódját.
Ahogy az előző hozzászólásomban mutattam, ha a tartalom nincs közzétéve a visszatérési érték rögtön FALSE, tehát nem is fut tovább a jogosultság ellenőrzés.
Itt pedig látható, hogy a szerző csak megtekintési jogot kap. Minden további hozzáférés csak a tartalom adminisztrálása jogosultsággal vagy
$user->uid = 1
számára lehetséges.Szerintem...
juj, ez probléma
hát, ahogy sgabe rámutatott ez úgy néz ki így nem fog menni.
akkor valami máshoz kell kötni az access checket. vegyél fel a típusba egy sima on/off checkboxot, senki nem szerkesztheti. mondjuk hook_nodeapi -ba intézd el, hogy ha op update vagy create akkor ha status == 1 akkor a checkboxod 'pipálódjon ki'.
errefelé lesz a megoldás, a példamodul majdnem pont ezt csinálja úgy nézem.
-
clear: both;
lásd lentebbi hozzászólásom
Sehogy se fog menni, mert a nem közzétett tartalmat csak a $user->uid = 1 vagy a tartalom adminisztrálása jogosultsággal rendelkezők tudják szerkeszteni.
ez nem igaz ám
próbáld ki, hogy adsz jogot create story -ra meg edit own story -ra. beküldesz egy nem közzétett story -t és simán tudja a tulaj szerkeszteni akkor is, ha nem közzétett.
szóval a node modul is megcsinálja valahogy ezt. belenézek majd.
persze valami mégse stimmel.
próbálom megoldani egy node access modullal, amúgy is érdekelt, hogy működik a node access system. hook_node_grants és hook_node_access_recors hurkokkal bűvészkedek (meg persze hook_perm) és nemigen akar összejönni, pedig asszem egész jól értem már a node access system, máshoz kötött jogokat legalábbis úgy tűnik meg tudok csinálni. (ráment egy fél vasárnapom meg egy komplett hétfő estém, de akkor is megérte, ha ez a konkrét probléma nem is oldható meg sehogyse:)
mutatok egy érdekes szkrínsot, belerakva amit nem bírok felfogni.
http://img.skitch.com/20090916-cdgcnmr4q72cwqtj1akxih1t35.jpg
a modul ami ezt csinálja pedig íme:
myperm.module
na gyere node modul, mutasd micsinász te pontosan.. ;)
-
clear: both;
meghekkeltem a node.module -t
így:
és egyből csinálja.
igazad volt.
-
clear: both;
Másik út: Workflow modul
Amellett, hogy nagyon érdekel a saját modulból való megoldása a problémának, leírom, hogy ezt a működést a Workflow modullal meg tudod valósítani.
Ott persze nem a közzétett státuszt használva, hanem saját állapotokkal, ahol beállíthatod, hogy az egyes állapotokban lévő node-okkal melyik csoportnak mire legyen jogosultsága, ill. hogy melyik csoport milyen állapotváltoztatásokra jogosult.
Ha végül ezt az utat választod, vagy csak ki akarod próbálni, akkor arra figyelj, hogy ez a modul felülírja a node modul jogosultságait, szóval nagyon össze lehet kavarodni vele.
Újabb kód
Az alábbi kóddal probálkoztam, köszönhetően boobaa útmutatásának, sajnos ez sem működik:
--
Borsa Péter
https://peterborsa.eu
ne szívasd magad tovább
Már leírtam feljebb, hogy
$node->status
alapján nem fog működni. Leírom a lényeget még egyszer, mert afölött mindenki átsiklik. Vagy javítsatok ki, de szerintem...Ha a tartalom nincs közzétéve a jogosultság ellenőrzés FALSE értékkel tér vissza, tehát nem tudsz hozzáférést biztosítani senkinek. Nem közzétett tartalomhoz csak a $user->uid = 1 és a tartalom adminisztrálási jogosultsággal bíró felhasználó fér hozzá, senki más! Ezen nem tudsz változtatni, csak ha módosítod a node modul azon sorát, amire feljebb rámutattam. Attól, hogy helyettesíted a státuszt egy checkboxszal ugyanúgy FALSE lesz a jogosultság ellenőrzés eredménye, mert nincs közzétéve a tartalom!
Igen igen, köszi az
Igen igen, köszi az útmutatást, hagyom akkor nem próbálkozok vele, reménykedem hogy ez majd egyszer változik :)
--
Borsa Péter
https://peterborsa.eu
Workflow modul
lerásával küzdöttem (Using drupal könyv). Ott is felmerült, hogy a szerkesztő és a beküldő szépen tudja egymásnak pinpongozni a tartalmat, addig, míg nem közölhető.
Utána a szerkesztő közzéteszi és elméletileg kész. Gyakorlatilag nem, mert a tulaj megint szerkesztheti a tartalmat, ami nem nyerő.
Ott az a megoldási javaslat lett, hogy egy + cck mezőt felvenni ami az eredeti tulajra mutat, és a publikálás közben a tulajdonost átírni. Így megmaradna az, hogy a cikket ki szerezte a referencián keresztül, de szerkeszteni már nem tudja.
Meg nem valósítottam, természetesen, addig már/még nem jutottam el. A szál itt: http://drupal.hu/forum/jogrend-kérdés-saját-tartalom-módosítása
--
Szabó Dénes - Internode.hu - Munkára fogott weblapok
mégis van rá mód
Ezen téma kapcsán felfigyeltem egy view_unpublished nevű modulra. Letöltöttem és meglestem a kódot, hogy mégis hogyan...
Ezzel a hurokkal módosítja a menüt, hogy először a saját modul ellenőrizze a jogosultságokat és ha nem kielégítő az eredmény (
FALSE
) csak akkor dobja oda a node modulnak.Ezen az úton elindulva szerintem megoldható amit szeretnél.