[Zope-dev] Re: start_new_thread / user issue
    Tres Seaver 
    tseaver at zope.com
       
    Tue Apr 13 01:43:58 EDT 2004
    
    
  
Toby Gustafson wrote:
> Hi,
> 
>    Within a python file I do a call to thread.start_new_thread(...).
> Before this call, I am the admin user (verified by calling
> AccessControl.getSecurityManager().getuser().getUserName()).  After the
> call, however, in the new thread, the user is now "Anonymous User".
> 
>    Is there any way to somehow "pass" the user between threads because the
> code executed in the new thread needs the same permissions as the code
> executed in the old thread?  I can obviously pass the user name to the new
> thread, but I'm not sure if that does me any good, because I doubt an
> Anonymous User would have permission to make itself another user.
> 
>    Any hints or suggestions would be appreciated.
Given that you trust yourself ;), you can add a security context from 
within the second thread;  you could pass the user ID to the thread via 
one of several forms of "currying", e.g. via instance variables::
   class TrustedSecurityTask:
      def __init__(self, user_id):
          self._user_id = user_id
      def __call__(self, *args, **kw):
          sm = getSecurityManager()
          sm.newSecurityContext(None, User(self._user_id))
          # your code here .....
    thread = Thread(TrustedSecurityTask(user_id))
    thread.start()
Tres.
-- 
===============================================================
Tres Seaver                                tseaver at zope.com
Zope Corporation      "Zope Dealers"       http://www.zope.com
    
    
More information about the Zope-Dev
mailing list