2016-11-10 112 views
0

我建立一个瓶博客,现在建立一个管理界面。我已阅读过有关为Flask-Admin设置安全性的信息。我已经成功地建立了安全性(接入仅限于注册用户)为我所有的车型,但用户仍可以访问哪些有它只是一个光秃秃的家按钮“/管理员”路线。隐藏烧瓶管理员路线

我的问题是:有没有什么办法,我可以隐藏或保护“/管理员”的路线,所以未认证用户只是重定向到登录页面/拒绝访问?

非常感谢!

附上我的当前管理设置:

from flask_admin import Admin 
from flask_login import current_user 
from flask_admin.contrib import sqla 
from wtforms.widgets import TextArea 
from wtforms import TextAreaField 
from samo.models import User, Post, Tag 
from samo import app,db 

admin = Admin(app, name='Admin', template_mode='bootstrap3') 

class CKTextAreaWidget(TextArea): 
    def __call__(self, field, **kwargs): 
     if kwargs.get('class'): 
      kwargs['class'] += ' ckeditor' 
     else: 
      kwargs.setdefault('class', 'ckeditor') 
     return super(CKTextAreaWidget, self).__call__(field, **kwargs)  

class CKTextAreaField(TextAreaField): 
    widget = CKTextAreaWidget() 

class PostAdmin(sqla.ModelView): 
    form_overrides = dict(content=CKTextAreaField) 
    create_template = 'blog/ckeditor.html' 
    edit_template = 'blog/ckeditor.html' 
    form_excluded_columns = ('slug')  
    def is_accessible(self): 
     return current_user.is_authenticated 
admin.add_view(PostAdmin(Post, db.session)) 

class TagAdmin(sqla.ModelView): 
    def is_accessible(self): 
     return current_user.is_authenticated 
admin.add_view(TagAdmin(Tag, db.session)) 

class UserAdmin(sqla.ModelView): 
    def is_accessible(self): 
     return current_user.is_authenticated 
admin.add_view(UserAdmin(User, db.session)) 
+0

如果隐藏的路线,你将如何访问它?为什么你不能使用重定向,如果没有通过身份验证,就像你说的那样? –

回答

2

我用这样的配置像你描述它为我所有的网站。使用AdminIndexView。下面是如何处理登录,注销和重新定向的情况下,用户没有被授权的例子。

class FlaskyAdminIndexView(AdminIndexView): 

    @expose('/') 
    def index(self): 
     if not login.current_user.is_authenticated: 
      return redirect(url_for('.login')) 
     return super(FlaskyAdminIndexView, self).index() 

    @expose('/login', methods=['GET', 'POST']) 
    def login(self): 
     form = LoginForm(request.form) 
     if helpers.validate_form_on_submit(form): 
      user = form.get_user() 
      if user is not None and user.verify_password(form.password.data): 
       login.login_user(user) 
      else: 
       flash('Invalid username or password.') 
     if login.current_user.is_authenticated: 
      return redirect(url_for('.index')) 
     self._template_args['form'] = form 
     return super(FlaskyAdminIndexView, self).index() 

    @expose('/logout') 
    @login_required 
    def logout(self): 
     login.logout_user() 
     return redirect(url_for('.login')) 

在你__init__.py在其中创建你的管理对象做到这一点:

admin = Admin(index_view=FlaskyAdminIndexView())