Re: [Zope3-Users] Run starup code with zope 3.

2009-02-12 Thread Marius Gedminas
On Thu, Feb 12, 2009 at 07:28:23PM +0100, Sebastian Bartos wrote:
> Was playing with the event system a bit, and ended up with the
> following, which works fine:
> 
> import zope.event
> class MyEvent:
> pass
> event = MyEvent()
> def f(event):
> if isinstance(event, zope.app.appsetup.interfaces.ProcessStarting):
> """Put stuff you want to execute after server startup here. """
> principalPermissionManager.grantAllPermissionsToPrincipal("use")
> zope.event.subscribers.append(f)
> 
> ...
> 
> Is this a good zopey way?

An emphatic No.  This slows down the processing of every event by
performing an extra function call and an if statement, instead of using
a hash-driven dispatch that zope.component provides for subscribers.

The  ZCML directive is a good Zopey way.  ZCML:

  

Code:

  @zope.component.adapts(zope.app.appsetup.interfaces.ProcessStarting)
  def grantStuffOnStartup(event):
  principalPermissionManager.grantAllPermissionsToPrincipal("use")

Also, if you're hardcoding the principal ID here, you might as well just
do it in ZCML:

  

and if you're not hardcoding/want to be able to adjust the grant later
through the web, you should really use the IPrincipalRoleMap adapter on
the root folder that will store the grant persistently in the DB rather
than in memory.

Marius Gedminas
-- 
There is an almost obvious extension of interfaces that would allow formal
specification of arguments and return values.  We suspect it leads to the dark
side.
-- Jim Fulton


signature.asc
Description: Digital signature
___
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users


Re: [Zope3-Users] Run starup code with zope 3.

2009-02-12 Thread Sebastian Bartos
Was playing with the event system a bit, and ended up with the
following, which works fine:

import zope.event
class MyEvent:
pass
event = MyEvent()
def f(event):
if isinstance(event, zope.app.appsetup.interfaces.ProcessStarting):
"""Put stuff you want to execute after server startup here. """
principalPermissionManager.grantAllPermissionsToPrincipal("use")
zope.event.subscribers.append(f)

...

Is this a good zopey way?

- Seth


On Thu, 2009-02-12 at 20:32 +0300, Dan Korostelev wrote:
> 2009/2/12 Thierry Florac :
> > Le jeudi 12 février 2009 à 17:50 +0100, Sebastian Bartos a écrit :
> >> I'm struggling with some Zope 3 startup code. I registered a user like
> >> this for the Session Credentials plugin and login form stuff:
> >>
> >> ...
> >>
> >> def create(self, data):
> >> site = getSite()
> >> sm = site.getSiteManager()
> >>
> >> if sm.has_key('auth'):
> >> return "Site is already set up"
> >>
> >> pau = Pluggableauth()
> >> sm['auth'] = pau
> >> sm.registerUtility(pau, Iauth)
> >> users = PrincipalFolder()
> >> sm['auth']['Users'] = users
> >> sm.registerUtility(users, IAuthenticatorPlugin, name="Users")
> >> pau.authenticatorPlugins = (users.__name__, )
> >> pau.credentialsPlugins = ("No Challenge if Authenticated",
> >>   "Session Credentials")
> >>
> >> user = InternalPrincipal("user", "foo", "user",
> >>  passwordManagerName="SHA1")
> >> users["user"] = user
> >>principalPermissionManager.grantAllPermissionsToPrincipal("user")
> >
> >
> > To run code automatically at application startup, I think that you
> > should have a look at the IDatabaseOpenedWithRootEvent (defined in
> > zope.app.appsetup.interfaces).
> > I use this event to check a set of persistent database utilities at
> > application startup, and it works fine.
> 
> Also, zope.securitypolicy provides a way to store location-based
> grants. Just adapt your site object to IPrincipalRoleManager or to
> IPrincipalPermissionManager (defined in zope.security.interfaces) and
> use its methods to allow/deny roles/permissions to some principal ID.
> It will handle the actual storing work. Child objects will inherit
> parent's settings until they have their own local settings.
> 
-- 
Sebastian Bartos, 
keyserevr: pgp.mit.edu


signature.asc
Description: This is a digitally signed message part
___
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users


Re: [Zope3-Users] Run starup code with zope 3.

2009-02-12 Thread Dan Korostelev
2009/2/12 Thierry Florac :
> Le jeudi 12 février 2009 à 17:50 +0100, Sebastian Bartos a écrit :
>> I'm struggling with some Zope 3 startup code. I registered a user like
>> this for the Session Credentials plugin and login form stuff:
>>
>> ...
>>
>> def create(self, data):
>> site = getSite()
>> sm = site.getSiteManager()
>>
>> if sm.has_key('auth'):
>> return "Site is already set up"
>>
>> pau = Pluggableauth()
>> sm['auth'] = pau
>> sm.registerUtility(pau, Iauth)
>> users = PrincipalFolder()
>> sm['auth']['Users'] = users
>> sm.registerUtility(users, IAuthenticatorPlugin, name="Users")
>> pau.authenticatorPlugins = (users.__name__, )
>> pau.credentialsPlugins = ("No Challenge if Authenticated",
>>   "Session Credentials")
>>
>> user = InternalPrincipal("user", "foo", "user",
>>  passwordManagerName="SHA1")
>> users["user"] = user
>>principalPermissionManager.grantAllPermissionsToPrincipal("user")
>
>
> To run code automatically at application startup, I think that you
> should have a look at the IDatabaseOpenedWithRootEvent (defined in
> zope.app.appsetup.interfaces).
> I use this event to check a set of persistent database utilities at
> application startup, and it works fine.

Also, zope.securitypolicy provides a way to store location-based
grants. Just adapt your site object to IPrincipalRoleManager or to
IPrincipalPermissionManager (defined in zope.security.interfaces) and
use its methods to allow/deny roles/permissions to some principal ID.
It will handle the actual storing work. Child objects will inherit
parent's settings until they have their own local settings.

-- 
WBR, Dan Korostelev
___
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users


Re: [Zope3-Users] Run starup code with zope 3.

2009-02-12 Thread Thierry Florac
Le jeudi 12 février 2009 à 17:50 +0100, Sebastian Bartos a écrit :
> I'm struggling with some Zope 3 startup code. I registered a user like
> this for the Session Credentials plugin and login form stuff:
> 
> ...
> 
> def create(self, data):
> site = getSite()
> sm = site.getSiteManager()
> 
> if sm.has_key('auth'):
> return "Site is already set up"
> 
> pau = Pluggableauth()
> sm['auth'] = pau
> sm.registerUtility(pau, Iauth)
> users = PrincipalFolder()
> sm['auth']['Users'] = users
> sm.registerUtility(users, IAuthenticatorPlugin, name="Users")
> pau.authenticatorPlugins = (users.__name__, )
> pau.credentialsPlugins = ("No Challenge if Authenticated",
>   "Session Credentials")
> 
> user = InternalPrincipal("user", "foo", "user",
>  passwordManagerName="SHA1")
> users["user"] = user
>principalPermissionManager.grantAllPermissionsToPrincipal("user")


To run code automatically at application startup, I think that you
should have a look at the IDatabaseOpenedWithRootEvent (defined in
zope.app.appsetup.interfaces).
I use this event to check a set of persistent database utilities at
application startup, and it works fine.

  Thierry Florac
-- 
  Chef de projet intranet/internet
  Office National des Forêts - Département Informatique
  2, Avenue de Saint-Mandé
  75570 PARIS Cedex 12
  Mél : thierry.flo...@onf.fr
  Tél. : +33 01.40.19.59.64
  Fax. : +33 01.40.19.59.85

___
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users