Node szerzőjének megadása 'administer nodes' jogosultság nélkül

aboros képe

A tartalom beküldő űrlapon szerepel egy 'Authoring information' mezőcsoport, ahol manuálisan megadhatjuk az adott tartalom szerzőjét és beküldési dátumát. Igen ám, de ez a lehetőség az 'administer nodes' jogosultság birtokában érhető csak el.

Szeretném, ha bizonyos csoportok átállíthatnák a tartalmak szerzőjét, de nagyon nem szeretném, ha 'administer nodes' jogosultságuk lenne, mert azzal együtt egy csomó olyan jogot is kapnának, amikre semmi szükségük, illetve beküldhetnének bármilyen tartalomtípust és szerkeszthetnének/törölhetnének bármilyen nodeot.

Írtam egy kis modult, ami megoldja ezt a problémát. Arra szeretnélek kérni benneteket, hogy vessetek rá egy pillantást, esetleg próbáljátok ki, hogy rendesen működik e. Mivel nem vagyok nagy modulfejlesztő guru, könnyen lehet, hogy valami olyan sutaságot csinálok, amit most még nem veszek észre, később viszont már késő lesz, ezért örülnék, ha valaki megmondaná rendben van e ez így.

Kicsit macerás volt a dolog, ezúton is óriási riszpekt a drupal.hu irc csatorna csapatának a gyors és hatékony iránymutatásokért.

Gondoltam ez pikk-pakk megy, hook_perm() -ben definiálok egy saját jogosultságot, aztán hook_form_alter -ben a $form['author']['#access'] -t a saját jogosultságomhoz kötöm és kész is. Gyönyörűen meg is jelent a kérdéses mezőcsoport, igen ám, de mentés után mégse változott a szerző. Hamarosan rávilágítottak, hogy a node_submit -ben van még egy user_access('administer_nodes'). Hosszas gyötrődés után végülis egy saját submit függvényt fűztem a submit lánchoz, így már működik a dolog.

custom_nodepermissions.info:

name = Custom node permissions
description = Breaks down administer nodes permission to smaller pieces to let users access some features even without administer nodes permission.
core = 6.x
version = 6.x-1.0-dev
package = CEU Customizations

custom_nodepermissions.module:

<?php
function custom_nodepermissions_perm() {
	return array(
		'set authoring information'
	);
}
 
function custom_nodepermissions_form_alter(&$form, $form_state, $form_id) {
	if (strpos($form_id, 'node_form') !== FALSE) {
		$form['author']['#access'] = user_access('set authoring information');
		if (user_access('set authoring information')) {
			$form['#submit'][] = 'custom_nodepermissions_form_submit';
			$form['#submit'] = array_reverse($form['#submit']);
		}
	}
}
 
function custom_nodepermissions_form_submit($form, &$form_state) {
  if (user_access('set authoring information')) {
    if ($account = user_load(array('name' => $form_state['values']['name']))) {
      $form_state['values']['uid'] = $account->uid;
    } else {
      $form_state['values']['uid'] = 0;
    }
  }
}
?>
 
Nagyon megköszönném, ha valaki rávilágítana az esetleges hibákra, legyenek azok aprók vagy hatalmasak.
Drupal verzió: