динамические конечные точки flask restful API с ограничениями

Так что я относительно новичок в фляге всего пару недель. Чтобы узнать больше о фляге, я поставил перед собой цель создать свой собственный API.

вариант использования API:

  1. аутентифицированные пользователи должны иметь возможность обращаться к конечной точке
    www.mydomain.com/api/ и выполните следующие действия (только для своих
    задач)

    • increase count (POST/PUT)
    • уменьшить количество (УДАЛИТЬ)
    • сбросить счетчик
  2. неаутентифицированные пользователи должны иметь возможность перейти на www.mydomain.com/api/john и просмотреть Метрики Джона. Я ожидаю, что будет много пользователей, каждый со своими показателями

Текущее состояние:

Я могу выполнять, публиковать, получать, помещать и удалять операции (пока нет настройки аутентификации...)

Мой вопрос:

Есть ли способ ограничить пользователей на основе их идентификатора пользователя. под этим я подразумеваю, что Джон имеет доступ только для выполнения запросов к www.mydomain.com/api/john.


person RooneyMUFC    schedule 30.12.2020    source источник


Ответы (1)


Есть несколько способов справиться с этим, и все будет зависеть от ваших требований.

Вы можете создать свою собственную (что я обычно и делаю) или использовать авторизацию на основе ролей, которую поддерживает Flask-User.

Подробнее о том, как это работает, можно прочитать здесь.

Обязательно просмотрите их пример приложения, чтобы понять, как поставить все это вместе.

Если у вас есть собственные настраиваемые разрешения, которые будут основаны на идентификаторе пользователя. Затем вы можете следовать той же концепции, но обрабатывать ее на основе идентификатора пользователя и ролей. Возможно, даже хранить уровни разрешений в пользовательском объекте (is_admin, is_general_user и т. д.), например, что-то вроде этого (псевдокод):

class User:
   is_admin = false
   is_read_only = false

   def __init__(**kwargs):
       # handle kwargs to set permissions

Затем вы можете получить доступ к своим переменным User после определения пользователя в какой-то унаследованной базовой фабрике или что-то в этом роде (псевдокод):

u = User(**my_permissions)

if(u.is_admin):
    # do something
person CodeLikeBeaker    schedule 30.12.2020