2016-11-10 147 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())