權限當然就是讓有應該權限的用戶能執行某些操作,把沒有權限的用戶限制在外面。Flask-admin提供了幾種方法來處理:
1, Http basic Auth
最簡單的身份驗證形式是HTTP基本身份驗證。 它不會干擾你的數據庫模型,也不需要你編寫任何新的視圖邏輯或模板代碼。 所以,當你還在權限開發中,可以考慮作為一個測試的功能;或者可以簡單運用於單用戶的應用。
你可以參考https://flask-basicauth.readthedocs.io/en/latest/
但是這個組件無法一個登錄界面整合到flask-admin中,功能也太簡陋了。
2,自己集成權限框架(flask-login 或者 flask-httpAuth)
Flask 提供了一些訪問規則允許你自己去定義一些訪問的實現,你可以自己寫,也可以集成想flask-login這些低層次的框架,然后自己實現訪問控制。Flask-admin提供以下的實例:
class MicroBlogModelView(sqla.ModelView): def is_accessible(self): return login.current_user.is_authenticated def inaccessible_callback(self, name, **kwargs): # redirect to login page if user doesn't have access return redirect(url_for('login', next=request.url))
具體的例子,可以查看 https://github.com/flask-admin/Flask-Admin/tree/master/examples/auth-flask-login.
使用這些底層次的框架的缺點就是要自己去實現所有的細節。
3,使用flask-sercurity
如果你想要一個更加精美的解決方案,你可以使用Flask-Security,它是一個更高級的庫。 它具有許多內置的視圖,用於執行用戶注冊,登錄,電子郵件地址確認,密碼重置等常見的功能。
唯一復雜的就是使內置的Flask-Security視圖與Flask-Admin模板順利集成,以達到一致性的用戶體驗。 為此,您需要覆蓋內置的Flask-Security模板,並通過將以下內容添加到每個文件的頂部來擴展Flask-Admin基本模板:
{% extends 'admin/master.html' %}
現在,您需要手動傳遞Flask-Admin模板的一些上下文變量,以便從Flask-Security視圖調用時頁面能正確呈現。 定義一個security_context_processor函數將為你處理這個問題:
def security_context_processor(): return dict( admin_base_template=admin.base_template, admin_view=admin.index_view, h=admin_helpers, )
具體可以查看例子:
https://github.com/flask-admin/Flask-Admin/tree/master/examples/auth.
該示例只使用內置的注冊和登錄視圖,但是您可以按照相同的方法來包含其他視圖,例如忘記密碼,發送驗證郵件等。