Kullanıcı çözünürlüğü ve filtrelemeli şişe huzursuz uç noktaları

Yalnızca kendilerine sveyaan kullanıcıya ait nesneleri döndüren API’yi nasıl düzgün bir şekilde aramalı?

api/version/items/

veya

api/version/user//items/

İlk durumda, sunucu veritabanını, kimlik doğrulamasından aldığı bir kullanıcı kimliği ile sorguladı.

I don't know how to create both cases in Flask-restless. I think a preprocessveya will be useful, where I could get user_id from authveyaization (JWT token), but I can't find a way to use it as search parameters fveya DB.

from flask_jwt impveyat JWT, jwt_required, current_user
...
manager.create_api(Item,
               methods=['GET'],
               collection_name='items',
               url_prefix='/api',
               preprocessveyas=dict(GET_SINGLE=[api_auth],GET_MANY=[api_auth]))   


@jwt_required()
def api_auth(*args, **kwargs):
    user_id = current_user.id
    # some code with user id addition.
    pass
1

6 cevap

Doğrudan sorgulamaya çalıştığınız kaynaklara başvuran bir uç nokta kullanmalısınız. Örneğin:

api/version/items

Bir get_single ve get_many önişlemcisini ayrı ayrı tanımlamanız gerekir. Tekli (tam sayı) için example_id ve birden çok ön işlemcinin sonucu bağımsız değişkeni (sözlük), kullanıcıya ne döndürüleceğini tanımlamak için kullanılmalıdır.

From the Flask-restless docs:

Sözlükleri kabul eden önişlemciler ve son işlemciler   parametreler argümanlarını yerinde değiştirebilir (ve gerekir). o   Örneğin sonuç sözlüğünde yapılan değişikliklerin   Balon-Huzursuz görünüm işlevleri tarafından görüldü ve sonuçta   müşteri.

Bu nedenle, ön işlemcilerinizde, veritabanınızdaki (kullanıcıyla bir ilişki içinde tanımlanmış) öğeleri almak için aşağıdaki gibi bir şey yapabilirsiniz:

@jwt_required()
def api_auth_get_many(instance_id=None, *args, **kwargs):
    user_id = current_user.id

    if instance_id in User.query.get(user_id).items:
        pass
    else:
        instance_id = None    # Do not return the value if not permitted

@jwt_required()
def api_auth_get_many(result=None, *args, **kwargs):
    user_id = current_user.id
    result = User.query.get(user_id).items   # Return all items allowed for user
0
katma
Teşekkürler, ancak ilk yönteminizin "api_auth_get_single" olarak adlandırılacağını ve ikinci yöntemin ise işlem değişkeninin (önişlemci değil), sonuç değişkeninin JSON sözlüğü olması gerektiğini düşünüyorum.
katma yazar Meph-, kaynak

Doğrudan sorgulamaya çalıştığınız kaynaklara başvuran bir uç nokta kullanmalısınız. Örneğin:

api/version/items

Bir get_single ve get_many önişlemcisini ayrı ayrı tanımlamanız gerekir. Tekli (tam sayı) için example_id ve birden çok ön işlemcinin sonucu bağımsız değişkeni (sözlük), kullanıcıya ne döndürüleceğini tanımlamak için kullanılmalıdır.

From the Flask-restless docs:

Sözlükleri kabul eden önişlemciler ve son işlemciler   parametreler argümanlarını yerinde değiştirebilir (ve gerekir). o   Örneğin sonuç sözlüğünde yapılan değişikliklerin   Balon-Huzursuz görünüm işlevleri tarafından görüldü ve sonuçta   müşteri.

Bu nedenle, ön işlemcilerinizde, veritabanınızdaki (kullanıcıyla bir ilişki içinde tanımlanmış) öğeleri almak için aşağıdaki gibi bir şey yapabilirsiniz:

@jwt_required()
def api_auth_get_many(instance_id=None, *args, **kwargs):
    user_id = current_user.id

    if instance_id in User.query.get(user_id).items:
        pass
    else:
        instance_id = None    # Do not return the value if not permitted

@jwt_required()
def api_auth_get_many(result=None, *args, **kwargs):
    user_id = current_user.id
    result = User.query.get(user_id).items   # Return all items allowed for user
0
katma
Teşekkürler, ancak ilk yönteminizin "api_auth_get_single" olarak adlandırılacağını ve ikinci yöntemin ise işlem değişkeninin (önişlemci değil), sonuç değişkeninin JSON sözlüğü olması gerektiğini düşünüyorum.
katma yazar Meph-, kaynak

Doğrudan sorgulamaya çalıştığınız kaynaklara başvuran bir uç nokta kullanmalısınız. Örneğin:

api/version/items

Bir get_single ve get_many önişlemcisini ayrı ayrı tanımlamanız gerekir. Tekli (tam sayı) için example_id ve birden çok ön işlemcinin sonucu bağımsız değişkeni (sözlük), kullanıcıya ne döndürüleceğini tanımlamak için kullanılmalıdır.

From the Flask-restless docs:

Sözlükleri kabul eden önişlemciler ve son işlemciler   parametreler argümanlarını yerinde değiştirebilir (ve gerekir). o   Örneğin sonuç sözlüğünde yapılan değişikliklerin   Balon-Huzursuz görünüm işlevleri tarafından görüldü ve sonuçta   müşteri.

Bu nedenle, ön işlemcilerinizde, veritabanınızdaki (kullanıcıyla bir ilişki içinde tanımlanmış) öğeleri almak için aşağıdaki gibi bir şey yapabilirsiniz:

@jwt_required()
def api_auth_get_many(instance_id=None, *args, **kwargs):
    user_id = current_user.id

    if instance_id in User.query.get(user_id).items:
        pass
    else:
        instance_id = None    # Do not return the value if not permitted

@jwt_required()
def api_auth_get_many(result=None, *args, **kwargs):
    user_id = current_user.id
    result = User.query.get(user_id).items   # Return all items allowed for user
0
katma
Teşekkürler, ancak ilk yönteminizin "api_auth_get_single" olarak adlandırılacağını ve ikinci yöntemin ise işlem değişkeninin (önişlemci değil), sonuç değişkeninin JSON sözlüğü olması gerektiğini düşünüyorum.
katma yazar Meph-, kaynak

Doğrudan sorgulamaya çalıştığınız kaynaklara başvuran bir uç nokta kullanmalısınız. Örneğin:

api/version/items

Bir get_single ve get_many önişlemcisini ayrı ayrı tanımlamanız gerekir. Tekli (tam sayı) için example_id ve birden çok ön işlemcinin sonucu bağımsız değişkeni (sözlük), kullanıcıya ne döndürüleceğini tanımlamak için kullanılmalıdır.

From the Flask-restless docs:

Sözlükleri kabul eden önişlemciler ve son işlemciler   parametreler argümanlarını yerinde değiştirebilir (ve gerekir). o   Örneğin sonuç sözlüğünde yapılan değişikliklerin   Balon-Huzursuz görünüm işlevleri tarafından görüldü ve sonuçta   müşteri.

Bu nedenle, ön işlemcilerinizde, veritabanınızdaki (kullanıcıyla bir ilişki içinde tanımlanmış) öğeleri almak için aşağıdaki gibi bir şey yapabilirsiniz:

@jwt_required()
def api_auth_get_many(instance_id=None, *args, **kwargs):
    user_id = current_user.id

    if instance_id in User.query.get(user_id).items:
        pass
    else:
        instance_id = None    # Do not return the value if not permitted

@jwt_required()
def api_auth_get_many(result=None, *args, **kwargs):
    user_id = current_user.id
    result = User.query.get(user_id).items   # Return all items allowed for user
0
katma
Teşekkürler, ancak ilk yönteminizin "api_auth_get_single" olarak adlandırılacağını ve ikinci yöntemin ise işlem değişkeninin (önişlemci değil), sonuç değişkeninin JSON sözlüğü olması gerektiğini düşünüyorum.
katma yazar Meph-, kaynak

Önişlemci, bir sorgu nesnesi oluşturduğunuz yerdir. Ben öğeler için son nokta gibi görünmesi gerektiğini düşünüyorum:

api/version/items

ancak önişlemci ile istek ile iletilecek bir sorgu nesnesi oluşturacaksınız:

GET api/version/items?q={"filters":[{"name":"userid","op":"eq","val":10}]}
0
katma

Önişlemci, bir sorgu nesnesi oluşturduğunuz yerdir. Ben öğeler için son nokta gibi görünmesi gerektiğini düşünüyorum:

api/version/items

ancak önişlemci ile istek ile iletilecek bir sorgu nesnesi oluşturacaksınız:

GET api/version/items?q={"filters":[{"name":"userid","op":"eq","val":10}]}
0
katma