No this is not what signed urls are for. Signed urls are for delegating 
access control from one controller action to another. Consider this code:

@auth.requires_membership('admin'):
def index()
    link = URL('other')
    return dict(link=link)

@auth.requires_membership('admin'):
def other():
    return dict(message='hello world')

Both actions requires the same membership (group "admin"). So if a user 
that follows the link, the membership is checked twice. For more complex 
rules this can be time consuming. Signed url simplify the process:

@auth.requires_membership('admin'):
def index()
    link = URL('other',user_signature=True) #1
    return dict(link=link)

@auth.requires_signature()  #2
def other():
    return dict(message='hello world')

This mean the index() action degenerates a one time link that only works 
for this one user within this one session. Only this user within this one 
session can access the "other" action by following the link. the link will 
be different for another user. If the user logs out or somebody steals it, 
the link does not use it. This is the same as:

What you need is different. What you need depends on how the files got in 
that folder. If they were uploaded using

db.define_table(...Field('file','upload')...)

then you simply need to set 

db.define_table(...Field('file','upload',authorize=lambda row: 
auth.has_permission('download','file'))...)

if these are stati files that you create server side then you need your own 
controller:

@auth.has_permission('download','file'))
def getfile():
     return response.stream(open(os.path.join('/location/',request.args(0)))

This assumes your users are members of a group (for example 'downloaders') 
and this group has permission to 'download', 'file'. You can create the 
group and the permission entry using appadmin.

Massimo

On Friday, 27 July 2012 10:00:23 UTC-5, lyn2py wrote:
>
> I want to create a protected folder containing file uploads, which can 
> only be accessed selectively (different set of files for different users, 
> depending on their permissions).
>
> They should not be able to access it even if they have the direct link.
>
> Can I (or should I) do this using digitally signed urls?
> Or is there a better way about it?
>
>
>

-- 



Reply via email to