Hello, 

yes you are right.

Are these tools not enough for the aproach of "scopes" 
http://web2py.com/books/default/chapter/29/09/access-control#Authorization
 and http://web2py.com/books/default/chapter/29/09/access-control#Decorators
 ?

I mean you are talking about allow certain users to certain information in 
some tables. You are talking about access control and permissions. 
Something like the example in the book:

Assuming the following definitions:

>>> from gluon.tools import Auth
>>> auth = Auth(db)
>>> auth.define_tables()
>>> secrets = db.define_table('secret_document', Field('body'))
>>> james_bond = db.auth_user.insert(first_name='James',
                                     last_name='Bond')

Here is an example:

>>> doc_id = db.secret_document.insert(body = 'top secret')
>>> agents = auth.add_group(role = 'Secret Agent')
>>> auth.add_membership(agents, james_bond)
>>> auth.add_permission(agents, 'read', secrets)
>>> print auth.has_permission('read', secrets, doc_id, james_bond)
True
>>> print auth.has_permission('update', secrets, doc_id, james_bond)
False


@auth.requires_permission('read', secrets)
def function_four():
    return 'you can read secret documents'




El miércoles, 27 de mayo de 2020, 19:03:07 (UTC+2), Kevin Keller escribió:
>
> The "proper" way would be to define "scopes" in your application. Scopes 
> define who has access to which data. 
> You can also call it roles or tags or whatever. 
> Scopes is the term that is used by OAuth/OpenID connect, which is usually 
> used to secure APIs. 
>
> Normally you would get an OpenID (OIDC) ID Token as JWT when you login. 
> Once you have that you would read that tokens contents and look for the 
> scopes in the token and match those scopes with which the user shall access 
> your data.
> Similiar to what you did here with the workaround to match the user.id to 
> the data. 
> I suppose you can extend this examlple/workaround to used custom auth 
> fields or the roles fields provided by web2py. 
>
> Some applications dont use scopes but so called claims from the JWT token. 
> Claims is extra info about a user such as first, lastname phonenumber etc. 
> that can be extracted from the token. 
> They put user roles in the tokens claims and match them with the 
> applications rest api against the database. 
> Similair to what you did. 
>
> But claims are not supposed to be used for that normally, that is what 
> scopes are for. 
> Claims are just used to "contextualize" a reqiest for the API i.e. fetch 
> relevant information for the requestor if the requestor is for example from 
> Europe fetch all infos for Europeans from the database, 
> if from another continent, fetch other data. 
>
> I have not seen Web2py used in this way, but there you go. 
> Just though this info may be interesting. 
>
> I found this example / workaorund super useful. 
>
> Will also use it :). 
>
> Seems to just get the job done quickly. 
>
>
>
>
>
> On Wed, May 27, 2020 at 6:18 PM Jacinto Parga <jpa...@gmail.com 
> <javascript:>> wrote:
>
>> Hello, 
>>
>> I used this workaround in a similar case:
>>
>> @auth.requires_login()
>> @request.restful()
>> def myapi():
>>     def GET():
>>         response.view = 'generic.json'
>>         myreg = db(db.mytable.created_by==auth.user.id).select() # Maybe 
>> in your case mytable.user_id==auth.user.id
>>         if myreg:
>>             return dict(myreg=myreg)
>>         else:
>>             data ='{"Result" : "Still empty"}'
>>             return data
>>     return dict(GET=GET)
>>
>>
>>
>> El sábado, 23 de mayo de 2020, 10:17:44 (UTC+2), Alexei Vinidiktov 
>> escribió:
>>>
>>> Hello,
>>>
>>> How can I restrict access via RestAPI for the user such that they can 
>>> only get their own records (those that have the field user_id matching 
>>> their user id)?
>>>
>>> For example, I have a a table named 'collections' that has a 'user_id' 
>>> field, and I want my users to get only the collections that they created.
>>>
>>> If they try to get someone else's collection, then they should get a 
>>> 'not authorized' response.
>>>
>>> As an extension, I would also like to allow for users to be able to get 
>>> someone else's collection if its status is equal to 'PUBLIC'.
>>>
>>> Here's the definition of my collections table:
>>>
>>> db.define_table('collections',
>>> Field('user_id', db.auth_user, notnull=True),
>>> Field('language_code', length="3", requires=IS_IN_DB(db, 'language.code', 
>>> db.language._format), notnull=True),
>>> Field('title', length=512, notnull=True),
>>> Field('description', 'text', notnull=False),
>>> Field('privacy', length=50, requires=IS_IN_SET(privacy_set), notnull=
>>> True, default='PRIVATE'),
>>> Field('level',length=10, requires=IS_IN_SET(level_set), notnull=True, 
>>> default='NONE'))
>>>
>>> Thanks,
>>>
>>> --
>>> Alexei
>>>
>> -- 
>> 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 web...@googlegroups.com <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/web2py/a01f1311-adfe-4b95-9200-14afe29c9e5b%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/web2py/a01f1311-adfe-4b95-9200-14afe29c9e5b%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/web2py/c55b7133-868e-46c8-a015-4613f33b5f51%40googlegroups.com.

Reply via email to