>On Sunday 23 May 2004 01:39, Maas-Maarten Zeeman wrote:
> > 760 container._q_access(request, component) # <- extra
> > parameter
On Tuesday 25 May 2004 11:36, Evan LaForge wrote:
>
> I have a _q_access that needs the component and does the following:
>
> component = req.environ['PATH_INFO'][1:].split('/', 1)[0]
>
> This only works because it knows where it lives in the path (always at the
> bottom). If the above doesn't work you could do something like:
>
> p = req.environ['PATH_INFO'][1:].split('/')
> component = p[len(publisher.get_namespace_stack())]
>
> ... but that could be considered grody and hard to understand.
>
> > def _q_access(request, name):
> > if request.session.user is None and name == "private_thing":
> > raise AccessError('You must be logged in to access
> > "private_thing".')
>
> This I would suggest putting in private_thing. Then when you add another
> access-controlled object you simply have it inherit (or implement directly)
> whatever access method and there's no need to add to a growing switch in
> _q_access.
>
There are some situations that this is not clear.
Ex: Supose you want permit someone to view an object but you don't want to
let him edit it.
I guess different solutions:
.Adapt export list to session info, but that raises Traversal Error instead.
.Use _q_lookup for everything.
.Wrap methods or functions with classes provided with q_access; over clompex
for most cases.
I think in those situations this extension would be helpful. Possibly, limited
to members of the export list. IE:
# Second security check: call _q_access function if it's present.
if hasattr(container, '_q_access'):
# will raise AccessError if access failed
container._q_access(request, internal_name)
Although, I'd like to hear arguments against it.
Oscar Rambla