Flask Admin - ограничивает функции CRUD для собственного пользовательского контента - PullRequest
0 голосов
/ 19 декабря 2018

Мне интересно, есть ли кто-нибудь, кто успешно ограничил функции CRUD от администратора фляги.Или, если это вообще правильный инструмент.

То, что я хотел бы сделать, - это преобразовать ModelViews таким образом, чтобы пользователь мог редактировать только собственный контент.Пример: таблица базы данных «ресторанное меню» содержит блюда, предлагаемые различными ресторанами.Если ресторан хочет что-то изменить, он должен иметь возможность изменять и просматривать свой собственный контент, но не контент других ресторанов.В идеале, есть простой способ с sqlalchemy - где я сначала запрашиваю модель «Пользователь» и получаю ассоциированные рестораны с пользователями, а затем передаю ее в класс ModelView.

Есть ли легкая реализация такого действия или есть другая система CMS, которая может легче обрабатывать такую ​​функцию?

1 Ответ

0 голосов
/ 22 декабря 2018

Итак, я немного глубже изучил исходный код.Большое спасибо Gittert за помощь.

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

Таким образом, чтобы ограничить функции просмотра, я переписал get_query () и get_count_query (), как это было опубликовано в предыдущих постах:

##  overwrite
def get_query(self):
    self._auto_fush_deactivate()
    return super(CustomView, 
self).get_query().filter(User.id== 1)

def get_count_query(self):
    return self.session.query(func.count('*')).filter(User.id == 1)

, и чтобы манипулировать этим, пользователь может добавлять только новые данные, используясвой собственный внешний ключ в таблице я дополнительно переписал функцию on_model_create ().

def on_model_change(self, form, model, is_created):

    ### deactivate auto_flush temp. to not receive data integrity error
    self._auto_fush_deactivate()
    ### create model from table user
    overwrite_model = self.session.query(User).filter(User.id== 1).first()

    ### overwrite the user id with model from User-Model
    model.user_id =  overwrite_model
    self._auto_fush_activate()

def _auto_fush_deactivate(self):
    self.session.autoflush = False

def _auto_fush_activate(self):
    self.session.autoflush = True
...