URL-адрес администратора flask View все еще доступен после установки is_accessible на False

Я хотел бы защитить доступ к своим представлениям на основе ролей безопасности flask. Так, например, я установил:

class AdminView(ModelView):    
    def is_accessible(self):
        return current_user.has_role('admin')

а также

admin.add_view(AdminView(User, db.session))

Логика работает: когда я вхожу под пользователем без прав администратора, я не вижу таблицу User, когда я вхожу под пользователем с правами администратора, я ее вижу.

Но...

ввод URL-адреса

localhost/admin/user

по-прежнему дает каждому пользователю доступ к таблице пользователей, как для администраторов, так и для обычных пользователей. Как я могу использовать flask Admin для защиты URL-адреса от доступа не-администраторов? (Честно говоря, я ожидал, что def is_accessible() справится с этим в первую очередь.)


person jonathan.scholbach    schedule 11.09.2017    source источник
comment
Существует автономный пример обработки разрешений на основе роли Flask-Admin на SO.   -  person pjcunningham    schedule 12.09.2017


Ответы (1)


вы можете добавить декоратор @login_required в свое представление (прочитайте здесь), и поскольку вы используете flask-security, которая частично построена поверх flask-login, этот декоратор может уже быть там.

person smundlay    schedule 12.09.2017
comment
На самом деле это не помогает мне, так как у меня есть ролевая основа. Разрешения, какая роль может видеть, какое представление доступны администраторам во время выполнения. Вот почему мне нужно какое-то решение в определении класса представлений flask-Admin. - person jonathan.scholbach; 12.09.2017
comment
Ладно, я вижу твою проблему. Во-первых, вы всегда можете создать свой собственный декоратор маршрута. Или проверьте расширение Flask-Principal: pythonhosted.org/Flask-Principal - person smundlay; 18.09.2017
comment
Поскольку у меня уже работает Flask-Security, в который входит Flask-Principal, я не понимаю, что вы хотите мне сказать последним предложением в своем комментарии. - person jonathan.scholbach; 18.09.2017