[Grok-dev] Re: Protecting views to allow anonymous access only
Martijn Faassen
faassen at startifact.com
Mon Jul 28 09:06:34 EDT 2008
Hey Andreas,
I was away for a couple of days so this one got stuck in the mail queue
for a while, sorry for the delay!
[Are other people actually monitoring the mail queue? We set up quite a
few people to do it, but I'm not sure whether it's being done actively.
If you want to volunteer to make sure non-spam new postings get approved
quickly, please drop me a mail]
Andreas Kaiser wrote:
> I'm in the progress of developing my first Grok application, so please
> be patient with me and my maybe stupid questions.
>
> Right now I'm stuck with this…
>
> I need to protect a view, so that it can be accessed *only* by
> anonymous users.
>
> I know:
>
> ~ - how to protect a view with e.g.
> ~ grok.require('my.CustomPermission')
>
> ~ - how to create a custom role
>
> ~ - how to gather permissions in this role
>
> I don't know:
>
> ~ - how to grant my role to the anonymous user
>
> Any pointers would be appreciated.
Hm, interesting question to which I can't answer directly.
I'm not sure whether anonymous permission checks don't undergo some
shortcut whereby this strategy can fail, but some possible hints:
request.principal.id gives you the permission id, so you should be able
to figure out what the id for anonymous is. I think it's going to be
'zope.unknown'.
You might be able to use IPrincipalRoleMap on your content object
(perhaps the root of your application) to assign your role to
zope.unknown. See zope.app.securitypolicy.interfaces for more information.
Other possible directions to take:
It turns out you can apparently override what the
IUnauthenticatedPrincipal object will be by supplying the right utility.
See zope.app.security.globalprincipals.txt. Probably not needed.
More interesting bits in zope.app.security.globalprincipals.txt:
You can apparently create an unauthenticated group in ZCML (perhaps it's
already created in the standard startup profile of Grok - not sure). You
could then, I think, assign your role to this group, using
IPrincipalRoleMap again (the group id zope.unknowngroup should be the
principal id).
Regards,
Martijn
More information about the Grok-dev
mailing list