[Zope3-Users] Authentication, Principals and PAU...

Gary Poster gary at zope.com
Tue Feb 14 10:59:25 EST 2006


On Feb 13, 2006, at 6:17 PM, luis wrote:

>
> hi all,
>
> I'm trying to get started with zope3, and while I think I'm  
> beginning to
> understand parts of it, I'm still having a hard time with other  
> parts, so I
> hope someone here can help me out a bit.
>
> my first questions are concerning authentication/ users / pau...
>
> as a learning-excercise i want to create an example app, where  
> users can
> register themselves, login and upload files.
>
> I added one PAU to my site which uses session credentials and a
> principalfolder.. so now I can create users in that folder and can  
> log into
> the system. that works, but when I tried to add additional information
> (mail, etc) using the principal annotation utility, it just doesnt  
> work...

There are many ways to add annotations for a user.  If you already  
have a principal object, and your zcml has included the  
principalannotation package (as I expect Zope 3 does by default),  
then you can just say

from zope.app.annotation.interfaces import IAnnotations
annotations = IAnnotations(principal)
annotations['my.package.name'] = 'whatever' # or a btree or whatever

Lots of other ways to do it, but that's one.

> I created the interface and class to store the data, and tried to  
> register
> them with a zmcl adapter and browser:editform
> for="zope.security.interfaces.IPrincipal", but nothing happened...  
> so far
> I've been able to trace it down, the objects in the principalfolder  
> do not
> implement IPrincipal, but only IInternalPrincipal, so my "mapping"  
> in zcml
> is not active for my users.

I'm not clear what you want to do here.

>
> to be honest, the difference between principals, internalprincipals  
> and
> principalinfos is not that clear to me.

IPrincipals are the primary security interface for principals.  The  
others I expect (without bothering to look at the code) are  
implementation specific for a given authentication utility.  With the  
pau, principals  objects are generated as needed, on the fly, and not  
persisted themselves.

> I then downloaded schooltool to have a look how they implemented users
> there, and they don't use the pau at all, but created an own  
> authentication
> utility. and they don't use the principal annotation util either,  
> but store
> the person details as annotations on the objects themsleves..

That's one of the wonders of Zope 3: don't want to use implementation  
X of interface A?  Write your own implementation Y for interface A  
and register it instead.  As long as it complies with the interface,  
the intent, and the reality whenever I've tried it, is that you  
should be good to go.

I don't know schooltool's history.  There could be many reasons for  
them rolling their own.

> ...so...is this the recomented way of doing things? is the pau only  
> meant to
> be an example auth-utility and applications are supposed to  
> implement their
> own auth. mechanism? or maybe use the pau as a basic framework, but
> implement your own "principalfolder" as a pau-plugin?

The pau is a basic framework, with a number of reasonable basic  
implementations.  Plugins, such as the LDAP plugin in the  
svn.zope.org repository, can add capabilities to the pau.

> something else i noticed, is that in the pau the principalfolder lives
> "inside" the pau itself (the pau acts as a container) in software  
> space
> (++etc++site), while in schooltool the users live in the "persons"  
> folder
> in content space.
> is there a difference between software and content space for this?,
> specially in regard to users being able to register on their own,
> user-search or something else that can only be done in content- 
> space but
> not in software/configuration-space or viceversa?

It's a design decision.  We have provided views in content space that  
manipulated objects actually over in ++etc++site.  Also, since many  
pau plugins are utilities, when Jim's 'put utilities anywhere'  
proposal comes in you could in theory do precisely what schooltool  
did with a principals folder in content space but the auth utility  
still in ++etc++

Gary


More information about the Zope3-users mailing list