Thanks Anthony, indeed I will have to evaluate the tradeoff of speed for 
complexity. I don't think that our site will have the amount of traffic 
that this would be a problem but its always good to know good practices!
A friend suggested to use

db((db.task.id == 5) & (db.task.ref_to_job == db.job.id) & 
(db.job.ref_to_project == db.project.id) & (db.project.owner == 
auth.user_id))

I tried it and it works, but I am not sure how different it is from the one 
Leonel suggested. How does this work?
Also, you mentioned to check the timing of the query. Is there a web2py way 
to do that?

Thank you

On Monday, September 8, 2014 3:31:54 PM UTC+3, Anthony wrote:
>
> On Monday, September 8, 2014 4:47:57 AM UTC-4, Leonel Câmara wrote:
>>
>> Frankly, I would just store the user as the owner in all of those tables. 
>> Probably using auth.signature().
>>
>> You could do a very inefficient recursive select but I don't see any 
>> advantage.
>>
>> Something like:
>>
>> task = db.tasks[5]
>>
>> if task.job.project.owner != auth.user_id:  # You are doing a select for 
>> each dot you see here:
>>     raise HTTP(403)  # Forbidden
>>
>
> Before you go storing the user id in every table, you should check the 
> timing on the above query, and make the decision based on expected app 
> usage. While the above isn't the most efficient, if will probably be only a 
> few milliseconds, and if this app doesn't have heavy traffic or this 
> operation isn't very frequent, the inefficiency may be fine. You could also 
> see if it's faster to do a single multi table join rather than the 
> recursive select shown above (though the above is easier to write and 
> understand, so may not be worth making the change anyway).
>
> Anthony 
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to