flask-admin 保护整个管理站点,而不仅仅是索引视图

flask-admin secure the whole admin site but not just the index view

我可以通过拥有自己的 CustomeIndexView 来保护索引视图,并检查是否在那里进行了身份验证。但这不会保护模型视图,例如,URL /admin/MyModel/ 仍然不安全。有没有办法保护整个网站,基本上任何 url 像 /admin/xxx/?

一种方法是在 ModelView 中自定义 is_accessible。但我仍然觉得如果可以通过限制 root 访问来完成它会更直接 url

顺便说一下,我正在使用 flask-login

您可以使用 before_request 检查是否 current_user.is_authenticated 和 return 401 响应,如果没有,如:

@app.before_request
def before_request():
    if request.full_path.startswith('/admin/'):
        if not current_user.is_authenticated:
            abort(401, 'Please log in')

例如,您也可以使用它重定向到登录页面。

您可以继承自 ModelView:

class LoginRequiredView(ModelView):

    def is_accessible(self):
        return current_user.is_authenticated

    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('admin.login', next=request.url))

然后使用此视图而不是 ModelView 添加您的模型:

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