[Zope-dev] GUF/user authentication scalability

TFE MMS JARVIS JOHN jarvis.sd082@ex.tel.co.jp
Wed, 1 Dec 1999 23:07:09 +0900


This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.

------_=_NextPart_000_01BF3C05.6B0FE4D0
Content-Type: text/plain

Hello,

I was thinking about how to do an abstracted authorization component
and WOW! Here's GUF! This is really great!

I ran into a bit of a snag, though. It's not actually a problem with
GUF (it's not really a problem at all for most ;), it just brought it
out. It also provided a way to maybe fix it without bothering anything
else.

I have a site that I'm trying to set up that needs to authenticate
some 2,600+ users from a database. When I first tried out GUF, I found
it horribly slow. After poking around for a while, I found that the
cause of this was the calls to getUserNames from getUsers and getUser
which are called by BasicUserFolder.validate.

Basically, what happens is for every validation call, my userList
query is called and a list of 2,600+ items is created and searched for
a user. So I added a hook called userName to call instead of getUserNames. 
It works like the other hook methods and returns the user name if it
checks out.

That speeded things up when logged in. When there is no authorization
information, a list of 2,600+ user objects gets created in order to
search for domain information. I have to admit that I don't understand
the domain checking bit. It's really slow. I don't use domains so I
copied BasicUserFolder.validate over to GenericUserFolder and erased
that part. *cringe* There should be some way to fix it to make it
work. Major speed improvement, though.

Another thing--since the authorization has been abstracted out, the
call to userName for web authentication doesn't seem necessary. The
userAuthorize can be passed a dummy user object and accept or reject
the username and password from there. One less SQL call for me.

This is getting too long. Here's a diff against GenericUserFolder.py
from version 1.0.4. PLEASE PLEASE PLEASE don't try this on a
production server! Domains and who knows what else are broken.
And I could be absolutely looney!

And Thank You!!!
John Jarvis

 <<GenericUserFolder.py.diff.gz>> 


------_=_NextPart_000_01BF3C05.6B0FE4D0
Content-Type: application/octet-stream;
	name="GenericUserFolder.py.diff.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="GenericUserFolder.py.diff.gz"

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
EonNklIdQNZq/A+ToIQ8AigAAA==

------_=_NextPart_000_01BF3C05.6B0FE4D0--