Hello!

On Wednesday April 29, 2009 12:37:02 Jorge Vargas wrote:
> > On Monday April 27, 2009 10:42:35 Jorge Vargas wrote:
> >> more interesting than that template_vars.tg.identity returns None when
> >> the user isn't logged on. which means you will have to precheck all
> >> your access tests in something along the lines of
> >>
> >> if tg.identity and tg.identity['user'] == "something"
> >>
> >> which is too weird.
> >
> > You could turn the repoze.who identity dict into a TG2 Bunch and
> > customize that too.
> >
> >> on top of that it seems to me that checks in the form of are simply not
> >> possible py:if="'admin' in tg.identity.groups""
> >
> > It's always been discouraged to deal with that repoze.what stuff
> > directly, as it's going to change somewhere in v1.X and disappear in v2
> > -- it's something internal to repoze.what.
>
> I think you missed the point. by "Identity" I'm not talking about
> repoze.who.identity dict, I'm talking about the concept of allowing
> you to evaluate your object with pythonic calls. "if user in group"
> type of thing.

"Identity" is an ambiguous term, specially in this context; I'd rather hear 
exactly "authentication" or "authorization" -- hence I replied to both 
meanings just in case, because I wasn't certainly sure what you meant.


> >> is there an obvious way of doing this with repoze.what that I'm
> >> missing?
> >
> > You have two options to do that, which are also simpler (from my point of
> > view):
> > http://code.gustavonarea.net/repoze.what-pylons/Manual/Misc.html#predicat
> >e-evaluators
>
> is this syntax really better at the template level?
> <p py:if="tg.predicates.is_user('jorge')">Hi Jorge</p>
>
> I find it a lot more verbose

Yes, it is.

> , also isn't this evaluating the predicate
> twice?

No, as far as I see.


> by the way from repoze.what.plugins.pylonshq import is_met is not the
> correct path.

Are you using an old version of repoze.what-pylons? That function wasn't 
present in early betas.

It works over here:
"""
> >>> from repoze.what.plugins import pylonshq
> >>> dir(pylonshq)
> ['ActionProtector', 'ControllerProtector', '__all__', '__builtins__',
>  '__doc__', '__file__', '__name__', '__package__', '__path__',
>  'booleanize_predicates', 'debooleanize_predicates', 'is_met', 'not_met',
>  'protectors', 'utils']
> >>> from repoze.what.plugins.pylonshq import is_met
> >>> is_met
> <function is_met at 0xa55a3e4>
"""


> > http://code.gustavonarea.net/repoze.what-pylons/Manual/Misc.html#boolean-
> >predicates
>
> could you please explain why this warning? I'm really shock here. are
> you telling us that the default way TG is using repoze.what will break
> your security? last time I read the ticket regarding this
> implementation it was never mention that this will be a security
> issue.

I always warned it was a horrible idea, totally discouraged by me, which 
_could_ (not "will") bring side-effects and/or make the application error-
prone.

That warning just lists the exact situations under which there may be security 
flaws because of that misfeature.


> >> Also keep in mind this is pure syntax sugar as the real
> >> security check was done in the controller. Last but not least is this
> >> a class that is worth including in r.what? or should we keep it TG
> >> only? IMO this api is nice enough to work on any python
> >> template/framework and I think it's totally worth pushing into what.
> >
> > Regarding the repoze.who identity dict, I think TG2 could turn that dict
> > into a Bunch if you find it necessary.
>
> That's a good idea but you keep telling us that's "internal" for
> repoze.what and we can't rely on it so why/how can we work with it if
> it's going away?

There will be a 100% backwards-compatible 1.5 release eventually, which will 
backport all possible enhancements from version 2.0. But repoze.what 2 won't 
have such a dictionary and thus it's likely* that v1.5 won't have it either 
(even if it keeps the dictionary, the arrangement may change).

Hence I can't suggest you to use it directly. Predicate checkers are the safe 
bet.

* repoze.what 2 is still taking shape, so at this point it's hard to tell if 
it'd be present in v1.5 or not. I just can assure it won't be present in v2 
(in fact it's one of the main reasons why I'm rewriting it all).


> > Regarding accessing the repoze.what credentials dict, it shouldn't be
> > supported because it's not intended to be used directly. Instead, I'd
> > recommend predicate evaluators -- and TG2 could have a short-cut to
> > is_met() and not_met() in the template.
>
> What's so wrong with making the predicates behave like boolean objects?

They make your code error-prone and may cause side-effects (e.g., security 
flaws) in some situations, as explained in detail in the repoze.what-pylons 
docs.

Cheers!
-- 
Gustavo Narea <xri://=Gustavo>.
| Tech blog: =Gustavo/(+blog)/tech  ~  About me: =Gustavo/about |
_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to