如何解决如何将自己的装饰器添加到烧瓶管理面板?
我使用 Flask-Login 进行登录处理。此外,我还为自己编写了一个装饰器,让 role=admin 的视图保持可见。
def admin_required(f):
@wraps(f)
def wrap(*args,**kwargs):
if current_user.role.name == "admin":
return f(*args,**kwargs)
else:
flash("You need to be an admin to view this page.")
return redirect(url_for('home'))
return wrap
我可以将那个装饰器用于我的路线。但我不知道如何将这个装饰器用于我的烧瓶管理面板。
Flask-SQLAlchemy 模型已添加到flask-admin 视图中,例如:
from flask_admin.contrib.sqla import ModelView
from flask_admin import Admin
admin = Admin(app,name='admin',template_mode='bootstrap3')
admin.add_view(ModelView(User,db.session))
admin.add_view(ModelView(Role,db.session))
但我想如果不是管理员的人点击:127.0.0.1:8000/admin 无法访问并被重定向到 /home。
但是我的 /admin 没有路由,当我实现一个时,我不知道应该返回什么 html?
谢谢
解决方法
使用内置方法is_accessible,默认情况下,它返回True,这意味着所有人都可以访问管理面板,您可以像这样覆盖它来更改它:
ppxlib
现在,当且仅当用户拥有管理员角色时,才能访问这些管理员视图。此外,您可能希望添加一个子句,使其仅在有人登录时才可访问,否则浏览器将引发内部服务器错误。你可以这样做:
class MyAdminViews(ModelView):
def is_accessible(self):
user = User.query.filter_by(role=current_user.role).first()
res = user.role == "admin"
return res
admin.add_view((MyAdminViews(User,db.session)))
admin.add_view((MyAdminViews(Post,db.session)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。