2014-04-16 19 views
6

Ho un comportamento davvero strano, se voglio tradurre un tipo di contenuto Archetype (ad esempio Folder) con plone.app.multilingual.Privilegi insufficienti: plone.app.multilingual [1.x] - Traduci un contenuto di Archetype

errore msg:

Insufficient Privileges 

You do not have sufficient privileges to view this page. If you believe you are 
receiving this message in error, contact the site administration. 

Il mio ambiente:

  • Plone = 4.3.2
  • plone.app.multilingual = 1.2.1
  • plone.multilingual = 1.2.1
  • plone.multilingualbehavior = 1.2
  • archetipo s.multilingual = 1.2
  • e circa 40 Plone Addon di (che rende questo molto complesso)

mio caso d'uso:

  • Due lingue sono configurati EN e DE
  • simple_publication_workflow di Plone è configurato.
  • Tutti gli elementi sono nello stato privato. (Anche le cartelle LanguageRoot sono in stato privato)

Posso riprodurre questo problema creando innanzitutto un contenuto (Cartella) nella parte inglese del sito. Il contenuto è privato, poiché questo è lo stato predefinito per i nuovi contenuti.

Quindi provo a tradurre il contenuto in tedesco facendo clic sul menu Traduci ->create German. Fatto ... viene visualizzato l'errore Insufficient Privileges.

Se installo un Plone 4.3.2 di vaniglia e plone.app.multilingial senza il mio enorme gruppo di addon, tutto funziona correttamente. Sono abbastanza sicuro che ci sia un problema con uno dei componenti aggiuntivi, ma ho bisogno di capire cosa porta a questo problema. Non importa, quale addon interrompe il sito.

Ulteriori ...

Dal momento che è un problema di permessi prima ho provato a pubblicare tutto e poi tradurre il contenuto in tedesco. Questo ha funzionato bene!

Bene, il passo successivo è stato il debug in plone.app.multilingual. Sono finito nel add.py AddTraverser

Il problema appare sul redirect on line 37 Se una parte dell'url non è accessibile al pubblico (Anonimo ??) si verifica l'errore.

imho è strano che l'implementazione della parte DX e della parte AT sia diversa.

ho cambiato l'attuazione dell'articolo AT a:

self.context.REQUEST.set('type', name) 
view = queryMultiAdapter((self.context, self.context.REQUEST), 
          name="add_at_translation") 
return view.__of__(self.context) 

invece di:

baseUrl = self.context.absolute_url() 
url = '%s/@@add_at_translation?type=%s' % (baseUrl, name) 
return self.request.response.redirect(url) 

Questo totalmente fisso il mio caso. E tutti i test plone.app.multilingual funzionano ancora.

Ma non so spiegare perché? E perché non funziona senza la personalizzazione?

Qualsiasi suggerimento è davvero apprezzato!

risposta

1

Perché la correzione funziona, potrebbe essere correlato a quello che l'utente non può essere autenticato durante la traversa. Questo è simile a, perché l'utente potrebbe non essere autenticato durante le viste del browser '__init__.

Questo potrebbe essere un bug e una richiesta di pull con la tua correzione e sarebbe preferibile un test che provasse il tuo punto fallendo senza di esso.

Si dovrebbe essere in grado di ottenere un messaggio di errore migliore rimuovendo Non autorizzato da errori filtrati in /Plone/error_log (via ZMI). Non sono sicuro, come può aumentare absolute_url Non autorizzato in qualsiasi condizione.

+0

Grazie per la tua risposta, ho già rimosso 'Non autorizzato 'da' error_log' e il messaggio di errore ('Nome utente o password errato' e quasi nessun tracback) è stato confuso, fino a quando ho visto il codice snippato che ho postato nella domanda. Devo riavviare il mio ambiente e provare a riprodurre il "bug". Controllerò la risposta a breve, sono sicuro che questo risolve il problema. – Mathias

+0

Ok. Speravo che il traceback di Unauthorized potesse rivelare il vero problema. Ti ricordi, il reindirizzamento a '' @@ add_at_translation'' è realmente accaduto prima dell'errore? Un possibile problema è che response.redirect() non esegue il reindirizzamento immediato e restituisce solo una stringa, che potrebbe in qualche modo interrompere la traversata con il set di componenti aggiuntivi. –