Problemi di accesso

17 contenuti / 0 new
Ultimo contenuto
Problemi di accesso

Ciao,

Sto scrivendo un modulo rubrica ma il modulo è funzionante solo come admin.
Ho configurato nei hook_menu i privilegi, li ho assegnati ma ... nella pagine dove genero delle tabelle i dati non sono visibili ai comuni mortali.
Non ricevo messaggi di errore di accesso!!

Chi ha idee??

Grazie Uccio

dovresti configurare:

<?php
function rubrica_perm() {
  return array(
'access Rubbbbrica');
}
?>

E prima di caricare la pagina controlli il permesso.
PS: ma ti da accesso negato?

la funzione della pagina è

<?php
function sk_addressbook_main() {
   
$content = "main function ";
   
$count_query = "Select count(name) from sk_addressbook  "    ;
       
$header = array(
        array(
'data' => 'Company', 'field' => 'company', 'sort' => 'asc'),
        array(
'data' => 'Name', 'field' => 'name'),
        array(
'data' => 'Email', 'field' => 'email'),
        array(
'data' => 'Phone', 'field' => 'tel'),
        array(
'data' => 'Mobile', 'field' => 'mob'),
        );
   
$sql_query='SELECT id, name, company, email, tel, mob from sk_addressbook'.tablesort_sql($header);
   
$children = pager_query(db_rewrite_sql($sql_query),15,0,$count_query);
   
$content .= "<br> $sql_query ";
    while (
$child = db_fetch_object($children)) {
         
$rows[] = array( $child->company,l($child->name, "addressbook/$child->id),  $child->email,$child->tel,$child->mob,);
          }
   
$content .= theme('table', $header, $rows);
   
$content .= theme('pager',NULL , 15);
    return
$content;
    }
?>

mentre hook permission è:
<?php
function sk_addressbook_perm() {
  return array(
'use addressbook', 'addressbook admin');
}
?>

oltre che nei menu ho delle robe del tipo
<?php
    $items
[] = array('path' => 'addressbook2',
       
'title' => t('addressbook'),
       
'callback' => 'sk_addressbook_main',
       
'access' => user_access('use addressbook'),
       
'type' => MENU_NORMAL_ITEM);
   
$items[] = array('path' => 'addressbook2/listall',
     
'title' => t('List All'),
     
'access' => user_access('use addressbook'),
     
'type' => MENU_DEFAULT_LOCAL_TASK,
     
'weight' => -10);
          
$items[] = array('path' => 'addressbook2/listall/num',
            
'title' => t('0-9'),
            
'access' => user_access('use addressbook'),
            
'callback' => 'sk_addressbook_sorted',
            
'type' => MENU_LOCAL_TASK,
            
'weight' => -11);
          
$items[] = array('path' => 'addressbook2/listall/A',
            
'title' => t('A'),
            
'access' => user_access('use addressbook'),
            
'callback' => 'sk_addressbook_sorted',
            
'type' => MENU_LOCAL_TASK,
            
'weight' => -10);
?>

Il problema è che non mi da accesso negato ma nasconde la tabella dei risultati

Uccio

Fammi capire:
questo $content .= " $sql_query "; lo visualizza...... visualizza anche il pager ma non la tabella?

io vedo :

1 le scritte
2 header della tabella
3 il pager con il numero di pagine

una cosa tipo:

main function
SELECT id, name, company, email, tel, mob from sk_addressbook ORDER BY company ASC
Company   Name   Email  Phone Mobile [L'header]
......il pager......

ma se sono admin vedo anche il contenuto della tabelle (le righe!)

Strano, vedendo il tuo codice al volo, non mi sembra di vedere errori. Oltretutto, se dai i diritti a "anonimus" di fare "use addressbook", direi che dovresti vedere tutto, visto che i diritti sono sulla chiamata di callback, che nel tuo caso è la funzione sk_addressbook_main().
Oltretutto all'interno di essa non ci sono richiami ad altre funzioni esterne, al di la delle api.
Ora devo uscire, ma se non riesci a risolvere in serata, poi (se lo desideri), mandarmi il modulo e faccio una prova da me in locale..... però, non prima delle 22

Tra l'altro, io uso codice molto molto simile e non vedo distinzioni tra quello che fai tu e quello che solitamente faccio io (a parte il filtro sulla query):

<?php
 
/**
 * Prepara e restituisce la lista
 *
 */
function citta_lista() {
   
// Prepara i titoli della tabella
   
$header = array(
       array(
'data' => t('Codice'), 'field' => 'codice_anagrafico'),
       array(
'data' => t('Citta\''), 'field' => 'citta'),
       array(
'data' => t('C.A.P.'), 'field' => 'cap'),
       array(
'data' => t('Provincia'), 'field' => 'provincia'),
       array(
'data' => t('Regione'), 'field' => 'regione'),
       array(
'data' => t('Nazione'), 'field' => 'nazione'),
      
t('Mostra'),
      
t('Elimina'),
    );
   
// Prepara l'eventuale condizione
   
if ($_GET['codice_anagrafico'] != '') {
        if (
$Condizione == '') $Condizione .= ' WHERE codice_anagrafico = \''.$_GET['codice_anagrafico'].'\' ';
            else
$Condizione .= ' AND codice_anagrafico = \''.$_GET['documento'].'\' ';
        }
    if (
$_GET['citta'] != '') {
        if (
$Condizione == '') $Condizione .= ' WHERE citta like \'%'.$_GET['citta'].'%\' ';
            else
$Condizione .= ' AND citta like \'%'.$_GET['citta'].'%\' ';
        }
    if (
$_GET['cap'] != '') {
        if (
$Condizione == '') $Condizione .= ' WHERE cap = \''.$_GET['cap'].'\' ';
            else
$Condizione .= ' AND cap = \''.$_GET['cap'].'\' ';
        }
   
// Seleziona i dati da mostrare in lista
   
$sql = "SELECT
                id,
                  codice_anagrafico,
                  cap,
                  citta,
                  provincia,
                  regione,
                  codice_anagrafico_nazione,
                  nazione,
                  raggruppamento_nazioni
            FROM
                {gest_citta}
        "
.$Condizione.tablesort_sql($header);   
   
// Imposta la query per il count delle righe
   
$sqlcount = "SELECT
                        count(*)
                     FROM
                        {gest_citta}
                    "
.$Condizione;   
   
$result = pager_query($sql, 25, 0, $sqlcount);
   
// Prepara la lista da dinserire nella tabella
   
while ($dati = db_fetch_object($result)) {   
        
$rows[] = array(
           
'data' => array(
            
$dati->codice_anagrafico,
           
$dati->citta,
            
$dati->cap,
           
$dati->provincia,
           
$dati->regione,
           
$dati->nazione,
              array (
'data' => l(theme_image('images/view.png', '', t('Visualizza')), '/citta/'.$dati->id.'/modifica', NULL, NULL, NULL, FALSE, TRUE  ), 'align' => 'center'),
            array (
'data' => l(theme_image('images/delete.png', '', t('Elimina')), '/citta/'.$dati->id.'/cancella', NULL, NULL, NULL, FALSE, TRUE  ), 'align' => 'center'),
            ));
    }
   
// Temizzazione della tabella e titoli
   
$output .= theme('table', $header, $rows);
   
// Temizzazione della pagina
   
$output .= theme('pager', NULL, 25);
   
// Ritorna la tabella temizzata e paginata
   
return $output;
}
?>

Ciao
Gianni

piccola scoperta

Se aggiungo all'utente il privilegio "adminster node " vedo la tabella!!

Suggerimenti?

per favore, posta tutta la funzione di hook_menu e tutta la hook_perm....... o, ancora meglio, tutto il modulo (non penso ci saranno "segreti industriali" in un modulo agend ;-) )
Ho provato in questo momento con un normalissimo modulo fatto in casa e i permessi/visualizzazioni mi vanno alla grande.

Ciao
Gianni

[OT]Per piacere quando inserite codice PHP usate il pulsantino apposito (PHP) e non CODE, rende molto più leggibile il codice (avendo l'evidenzazione della sintassi).[/OT]

Ciao
Marco
--
My blog
Working at @agavee

mavimo wrote:
[OT]Per piacere quando inserite codice PHP usate il pulsantino apposito (PHP) e non CODE, rende molto più leggibile il codice (avendo l'evidenzazione della sintassi).[/OT]

OK.... ricevuto ;-)

Uccio wrote:
piccola scoperta

Se aggiungo all'utente il privilegio "adminster node " vedo la tabella!!

Suggerimenti?

Ciao Uccio... ho provato il modulo e a me funziona perfettamente. Nel dubbio ho anche tolto ogni permesso all'utente anonimo, di ogni modulo, lasciando solo quello di "use addressbook" del tuo modulo. Mi sono disconnesso e mi funziona tutto, vedo i record inseriti, anche andando sulle singole lettere o vedendone il dettaglio.
Prova ad installare una versione "pulita" di drupal 5.1 in una nuova directory.... poi prova ad installare il tuo modulo e vedrai che funziona.

Il menu, nella sezione delle lettere, "comprimilo" con un codice simile a questo sotto:

<?php
                 $Tab
= array('num'=>-11,'A'=>-10,'B'=>-10,'C'=>-10,'D'=>-10,
                                   
'E'=>-10,'F'=>-10,'G'=>-10,'H'=>-10,'I'=>-10,
                                   
'L'=>-10,'M'=>-10,'N'=>-10,'O'=>-10,'P'=>-10,
                                   
'Q'=>-10,'R'=>-10,'S'=>-10,'T'=>-10,'U'=>-10,
                                   
'V'=>-10,'Z'=>-10,'W'=>-10,'J'=>-10,'skylogic'=>-9);
                foreach (
$Tab as $Lettera => $IdMenu) {
                  
$items[] = array(
                      
'path' => 'addressbook2/listall/'.$Letter,
                    
'title' => $Letter,
                    
'access' => user_access('use addressbook'),
                    
'callback' => 'sk_addressbook_sorted',
                    
'type' => MENU_LOCAL_TASK,
                    
'weight' => $IdMenu
                    
);
                } 
?>

Ok

Smontando il tutto ho trovato il perchè!!

Il modulo gira su installazione di drupal che usa tassionomy_access che controllando la generazione delle pagine e mi uccide il contenuto della tabella a meno che l'utente non abbia il permesso di "View" su "Uncategorized nodes"

Si puo camuffare il contenuto in qualche modo perchè venga visto categorizzato? ...forse è una follia

Uccio

Non sono andato a vedere il funzionamento di tassionomy_access, tuttavia il suo funzionamento è al quanto curioso: si parla di permesso di "View" su "Uncategorized nodes", ma il tuo NON è un nodo, ma una tabella all'interno di drupal, interrogata tramite api. Quindi, negare la visualizzazione della tabella è un comportamento anomalo di tassionomy_access che dovrebbe limitarsi unicamente ai nodi e alle sue categorie. Tutto IMO

Ciao
Gianni

Correzione,

Non ho risolto nulla la cosa ha funzionato poco (suppongo copie cache non so bene dove) e non sono riuscito a farmi dare la pagina!!
Nel frattempo ho scopero che avevo alcune incoerenze nel db ma non servono a risolvere il mio problema.

Prova a togliere il db_rewrite_sql da questa riga:

<?php
 $children
= pager_query(db_rewrite_sql($sql_query),15,0,$count_query); 
?>

Diventerebbe:

<?php
 $children
= pager_query($sql_query,15,0,$count_query); 
?>

Fammi sapere

Ciao
Gianni

Forse ci siamo,

Il primo esperimento su un db di prova sembra promettere bene, la cosa interessante e comunque questa:

La query con il db_rewrite_sql diventa:

SELECT id, name, company, email, tel, mob from sk_addressbook where type like 'skylogic' INNER JOIN {node_access} na ON na.nid = n.nid WHERE (na.grant_view >= 1 AND ((na.gid = 0 AND na.realm = 'all') OR (na.gid = 1 AND na.realm = 'term_access'))) ORDER BY company ASC

Che direi che non puo avere dati!!!

Per il momento Grazie di tutto, adesso ci lavoro un po sopra!!

Perfetto l'arcano è proprio questo!!

Il DB_Rewrite protegge i dati come se provenissero da un oggetto di tipo NODO che ovviamente ha tutti i parametri necessari per poter essere creata.

Grazie Uccio