Ciao,
vorrei escludere dai risultati della ricerca (modulo search) determinati content-type che sono visibili solo dagli utenti autenticati.
Vengono infatti elencato tutti i contenuti del sito anche quelli privati.
Garzie!!!
Sicurezza - Eliminare Content Type dai risultati della ricerca
Mer, 14/11/2012 - 16:29
#1
Sicurezza - Eliminare Content Type dai risultati della ricerca
È molto strano che utenti non autorizzati possano vedere elenco di contenuti che poi non sono accessibili. Come hai impostato i permessi per i nodi? Hai fatto girare la ricostruzione dei permessi?
I permessi in visualizzazione dei contenuti li ho gestiti inserendo il seguente codice nel modulo di core node. Questa modifica mi permette di gestire i permessi in visualizzazione dei nodi dall'area admin/user/permissions. Ecco il codice integrato:
/**
* Implementation of hook_perm().
*/
function node_perm() {
$perms = array('administer content types', 'administer nodes', 'access content', 'view revisions', 'revert revisions', 'delete revisions');
foreach (node_get_types() as $type) {
if ($type->module == 'node') {
$name = check_plain($type->type);
$perms[] = 'create '. $name .' content';
$perms[] = 'view '. $name .' content'; //PATCH NODE VIEW ACCESS
$perms[] = 'view own '. $name .' content'; //PATCH NODE VIEW ACCESS
$perms[] = 'delete own '. $name .' content';
$perms[] = 'delete any '. $name .' content';
$perms[] = 'edit own '. $name .' content';
$perms[] = 'edit any '. $name .' content';
}
}
return $perms;
}
e
/**
* Implementation of hook_access().
*
* Named so as not to conflict with node_access()
*/
function node_content_access($op, $node, $account) {
$type = is_string($node) ? $node : (is_array($node) ? $node['type'] : $node->type);
if ($op == 'create') {
return user_access('create '. $type .' content', $account);
}
if ($op == 'update') {
if (user_access('edit any '. $type .' content', $account) || (user_access('edit own '. $type .' content', $account) && ($account->uid == $node->uid))) {
return TRUE;
}
}
//PATCH START NODE VIEW ACCESS
if ($op == 'view') {
if (user_access('view '. $type .' content', $account) || (user_access('view own '. $type .' content', $account) && ($user->uid == $node->uid))) {
return TRUE;
}
else {
return FALSE;
}
}
//PATCH END NODE VIEW ACCESS
if ($op == 'delete') {
if (user_access('delete any '. $type .' content', $account) || (user_access('delete own '. $type .' content', $account) && ($account->uid == $node->uid))) {
return TRUE;
}
}
}
nel file node.module.php.
Non ho utilizzato il modulo Content Access/ACL perchè non mi permetteva l'invio di una newsletter con layout costruito da panels contenente diverse view con diversi content type tutti riservati.
mai modificare il core
hai provato ad usare panelizer http://drupal.org/project/panelizer per il contenuto newletter?
panelizer ,come dice il nome,pannellizza qualsiasi tipo di contenuto
Grazie!!! So bene che il core dovrebbe essere intoccabile ma se la soluzione ad un problema è estrema la si mette comunque in pratica....
Proverò ad utilizzare il modulo da te consigliato, aggiornerò il post dopo i test.
Grazie mille!!!