Opa Dorneles, Essa foi "caixa preta". Ia ser difícil para eu resolver sozinho esta. Funcionou corretamente com o teu pseudo-patch.
Muito obrigado Fabiano Dorneles Treméa escreveu: > Opa Marcon, > > > Aqui no meu trabalho, criamos uma tool que herda a classe MembershipTool > > e sobrepõe o método getMemberInfo, até aqui tudo bem. > > Uma customização desta tool é fazer com que suas actions apareçam > > somente para o Manager, para isso fizemos o seguinte no AppInstall.py: > > > > [snipped code] > > > > O código funciona quando se instala o produto, porém quando se reincia a > > instância as configurações são perdidas e volta o default do > > portal_membership. Eu acredito que o que está acontecendo é que quando > > se reinicia a instância as actions são buscadas da classe pai e aí > > carregadas, mas como fazer para que isso não aconteça? > > está quase tudo certo... só faltou um detalhe... :-) > > Da forma como está, ele itera sobre as actions e altera elas. Só que > elas estão armazenadas numa tupla, e como tu sabes, tuplas são objetos > imutáveis. Então quando você altera um dos objetos (uma action) presente > na tupla, o Zope 'não sabe' que a tupla foi alterada (na verdade não > foi a tupla, mas sim um objeto presente nela), para fazer a persistência > automática dos dados. É por isso que quando você reinicia o Zope, volta > tudo ao normal... > > Falta agora indicar ao Zope que os dados do conteúdo da tupla foram > alterados e que deve ser efetuado a persistência. Detalhe: esse enrosco > todo só acontece quando se altera dados diretos em um tupla, para todo > o resto, a persistência é automática e transparente. > > Segue um pseudo-patch para o teu código: > > def setupActions(self, out): > """Configura actions do portal.""" > pm = self.portal_membership > id_actions = ['preferences', > 'addFavorite', > 'mystuff', > 'favorites', > 'manage_members'] > + actions = pm._cloneActions() > - for action in pm.listActions(): > + for action in actions: > if action.id in id_actions: > action.permissions=('Manage portal',) > out.write('[portal_membership] configurada permissao da > action "%s" para ' > '"Manage portal".\n' % action.id) > + pm._actions = actions > > Essa última linha é que diz ao Zope que o 'pm' foi alterado e precisa > ser salvo. > > Outra possível saída seria apenas setar 'pm._p_changed = True', mas > acredito que com com o _cloneActions o código fica mais legível. > > HTH, > > -- > > Dorneles Treméa > X3ng Web Technology > Para enviar uma mensagem: zope-pt@yahoogrupos.com.br Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/zope-pt/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html