Puede reemplazar o cambiar la devolución de llamada de acceso para los formularios de edición de nodos utilizando hook_menu_alter .
Para hacer un permiso que se mostrará en la pantalla de permisos en función de los idiomas disponibles, necesitaría un módulo personalizado con este enlace:
/**
* Implements hook_permission().
*/
function MODULENAME_permission(){
//do something here to get an array of language names: $languages (I'm not familiar with i18n)
foreach ($languages as $lang) {
$permissions[$term->name] = array(
'title' => t($lang->name), //Or wherever the langauge name is stored
'description' => t('Edit content in '. $lang->name), //Again, adjust as needed
);
}
return $permissions;
}
Esto colocará una casilla en la página de permisos debajo del nombre de su módulo para cada idioma en el sitio. Asumiré que los nombres de los idiomas no cambian, en cuyo caso es seguro hacerlo.
Entonces solo necesita usarlos para bloquear el acceso si el usuario no está permitido de esta manera:
/**
* Implements hook_node_access($node, $op, $account).
*/
function MODULENAME_node_access($node, $op, $account){
//Get the language name for the node and store in variable $lang (again, I don't know how)
//Then see if the user can do anything except view it
if ($op != 'view'){
if (!user_access($lang)){
return NODE_ACCESS_DENY;
}
}
return NODE_ACCESS_IGNORE;
}
Tenga en cuenta que, al hacerlo de esta manera, el rol necesitará el permiso 'editar nodos' Y el permiso basado en el idioma para editar cualquier nodo.