Как разделить доступ Flask-Admin на can_create?

Я хочу создать условную функцию методов Flask-Admin.

Но сбивает с толку то, как задать условие между ролями пользователей, говорит функция can_create.

Вот фрагмент моего представления модели:

class UserModelView(sqla.ModelView):

    if current_user.has_role == 'superuser':
        can_create = True
    elif current_user.has_role == 'client':
        can_create = False

Но я получаю несколько ошибок, и я также пробовал разные способы, например:

class UserModelView(sqla.ModelView):
    def is_visible(self):
        if current_user.has_role == 'superuser':
            can_create = True
        elif current_user.has_role == 'client':
            can_create = False

и я также пробовал это с другими методами в классе BaseModelView, но все равно не работает так, как я хочу.

Итак.. можно ли дать условность в этой функции?


person Tri    schedule 02.04.2019    source источник
comment
вы уже пробовали это решение? stackoverflow.com/questions/17137601/   -  person gittert    schedule 02.04.2019


Ответы (1)


Я следую этому решению, основанному на совете @gitter, и оно работает в функции can_create, спасибо @ гиттер.

Но, к сожалению, это не будет работать в другом условном выражении, таком как form_excluded_columns.

.

EDIT: для методов (т. е.: can_create) из BaseModelView класса I следует следующее решение

Но для других методов, таких как form_excluded_columns, я использую таким образом и этот способ также может работать.

person Tri    schedule 02.04.2019
comment
Если вы ищете разные представления администратора для каждой роли, решением может быть добавление нескольких экземпляров flask-admin, подобных этому github.com/flask-admin/flask-admin/issues/55 - person gittert; 02.04.2019
comment
Кажется, я не могу использовать sqla.ModelView там, я хочу управлять двумя моделями в разных ModelView базах на ролях пользователей. - person Tri; 03.04.2019
comment
Дважды добавьте представление (используйте разные имена, чтобы избежать коллизий чертежей). Настройте каждый для доступа к разным ролям и настройте каждое представление с необходимыми настройками. Это должно делать свое дело. - person gittert; 03.04.2019