On 2010-11-8 16:42, Simone Orsi wrote: > On 11/08/2010 04:29 PM, Gilles Lenfant wrote: >> Le 8 nov. 2010 à 15:34, Simone Orsi a écrit : >> >>> On 11/08/2010 03:09 PM, Wichert Akkerman wrote: >>>> On 11/8/10 14:51 , Simone Orsi wrote: >>>>> On 11/08/2010 11:14 AM, Gilles Lenfant wrote: >>>>>> Le 8 nov. 2010 à 10:18, Simone Orsi a écrit : >>>>>> >>>>>>> hi, >>>>>>> >>>>>>> I need to create a product that deletes any user's content on user >>>>>>> deletion. I googled and grepped here and there and it seems there's no >>>>>>> event fired on user deletion. >>>>>>> >>>>>>> The only "right way" to do that seems to create an IUserManager PAS >>>>>>> plugin to handle it but IMHO that means much work to be done only to >>>>>>> have an event hook. The other solution, obviously, is monkey-patching, >>>>>>> which becomes even more bad since that part of PluggableAuthServ is >>>>>>> already patched by PlonePAS. >>>>>>> >>>>>>> Is this right? Do I have to create a plugin? >>>>>> >>>>>> Hi, >>>>>> >>>>>> I ran into this some times ago. See >>>>>> https://dev.plone.org/plone/ticket/7948 >>>>>> >>>>>> Was not for content but for user properties. Seems that Tarek Ziade >>>>>> started something in the Zope dev ML (PAS is a Zope hosted component) >>>>>> but I dunno the progress status. >>>>>> >>>>>> Note that it is very difficult to handle users from external sources >>>>>> deletion (LDAP, RDBMS, ...) since there's no event bus that goes to >>>>>> Zope. >>>>>> >>>>>> Cheers >>>>> >>>>> hi Gilles, >>>>> >>>>> thank for the link. Why is so difficult? I mean, what is needed IMO is >>>>> an event hook on the plone/zope side which gets triggered everytime a >>>>> user is deleted, non matter the source of the deletion. Am I missing >>>>> some inner implication? >>>> >>>> How do you expect Plone to know about a user being deleted in an active >>>> directory database? Or when someone deletes an OpenID identity? >>>> >>>> Wichert. >>> >>> I apologize, you are right Wichert. Anyway, the usecase I refer to does >>> not include deleting users from the source. So, I think I have to write >>> my custom plugin to handle my usecase. >> >> Sure, you may subclass the Products.PlonePAS.plugins.user.UserManager class >> or any better suited user source plugin class that implements >> IUserManagement, and do this : >> >> class ISomeUserDeleted(Interface): >> """Event triggerd at user removal""" >> login = Attribute("login that's already successfully deleted") >> >> class SomeUserDeleted(object): >> implements(ISomeUserDeleted) >> def __init__(self, login): >> self.login = login >> >> class MyUserSource(UserManager): >> ... >> def doDeleteUser(self, login): >> super(MyUserSource, self).doDeleteUser(login) >> notify(SomeUserDeleted(login)) >> ... >> >> With appropriate imports of course. Then handle the "SomeUserDeleted" event >> in whatever you want. >> >> Cheers > > Yes, this the quickier way. Thanks Gilles.
Please use Products.PluggableAuthService.events.PrincipalDeleted instead of SomeUserDeleted though. Wichert. -- Wichert Akkerman <[email protected]> It is simple to make things. http://www.wiggy.net/ It is hard to make things simple. _______________________________________________ Product-Developers mailing list [email protected] http://lists.plone.org/mailman/listinfo/product-developers
