Фильтрация SQLAlchemy для администратора - PullRequest
0 голосов
/ 13 июля 2020
• 1000 Но когда администратор делает запрос, мне нужно показать ему все записи обо всех пользователях.

Все, что я хочу, - это выяснить, могу ли я создать декоратор, который поставил бы ? -sign или * -sign вместо user_id в запросе ИЛИ измените запрос таким образом, чтобы он отображал все записи.

user_id = get_user_id_function()
query_result = session.query(Client).filter(operator == user_id).all()

Но проблема в том, что если я поставлю '?' или '*' - запрос покажет не все записи ... И я не хочу обращаться к

if Admin:
    run this special query
else:
    run regular one

Достижима ли моя задача?

1 Ответ

0 голосов
/ 13 июля 2020

Это своего рода компромисс. Вместо того, чтобы дважды писать запрос, вы просто условно включаете фильтр для пользователей, не являющихся администраторами.

# Psuedo code
admin_user_id = get_admin_user_id_function()
user_id = get_user_id_function()
client_query = session.query(Client)
if user_id != admin_user_id:
    client_query = client_query.filter(operator == user_id)
query_result = client_query.all()

Поскольку требуется больше фильтров AND, вы можете сделать что-то вроде этого:

# Psuedo code
admin_user_id = get_admin_user_id_function()
user_id = get_user_id_function()
filter_args = []
if user_id != admin_user_id:
    filter_args.append(operator == user_id)
# conditionally include more filters here
# ...
query_result = session.query(Client).filter(*filter_args).all()
...