簡單的例子如何使用燒瓶管理與瓶校長
from functools import partial
from flask.ext.admin import Admin as BaseAdmin, AdminIndexView
from flask.ext.principal import Permission, identity_loaded, Need
from flask.ext.security import current_user
PartnerAccessNeed = partial(Need, 'access')
class PartnerAccessPermission(Permission):
def __init__(self, partner_id):
need = PartnerAccessNeed(partner_id)
super(PartnerAccessPermission, self).__init__(need)
@identity_loaded.connect
def on_post_identity_loaded(sender, identity):
if hasattr(current_user, 'partner'):
identity.provides.add(PartnerAccessNeed(current_user.partner.id))
class PartnerAdminIndexView(AdminIndexView):
def __init__(self, partner_id, *args, **kwargs):
self.partner_id = partner_id
super(PartnerAdminIndexView, self).__init__(*args, **kwargs)
def is_accessible(self):
if current_user.is_anonymous():
return redirect(url_for_security('login'))
if not current_user.is_partner():
return False
permission = PartnerAccessPermission(self.partner_id)
if permission.can():
return True
return False
class PartnerAdmin(BaseAdmin):
def __init__(self, partner_id, endpoint, name, subdomain, *args, **kwargs):
index = PartnerAdminIndexView(name=name,
endpoint=endpoint,
url='/dashboard',
partner_id=partner_id)
super(PartnerAdmin, self).__init__(base_template='mcnm/master.html', index_view=index, subdomain=subdomain)
感謝,肖恩...用於車削我到文檔的這一個。我已經對它們進行了審查,並試圖實施它們......儘管無濟於事。那麼使用is_accessible方法就不必使用Flask-Login來保護管理儀表板?含義:那麼我不需要Flask-Login裝飾器來定義任何Flask-Admin視圖?我不得不說,在回購之外,這個文檔對於Flask-Admin的身份驗證很薄弱。偶然的情況下,如果超出上述回購協議,您會遇到另一個公共解決方案......想知道這個解決方案。 – Sean 2012-08-13 06:48:25
@Sean - 您不需要Flask-Login *裝飾器*,但您需要使用Flask-Login方法來驗證用戶身份。如果您查看[第85行](https://github.com/mrjoes/flask-admin/blob/master/examples/auth/auth.py#L85)並且超出範例,您會看到管理視圖只有當前用戶通過身份驗證時纔可以訪問。如果未經身份驗證的用戶嘗試訪問管理視圖,則應將其重定向到登錄屏幕。 – 2012-08-13 12:19:18
示例的鏈接正是我所需要的,謝謝。 – iurii 2014-07-02 07:16:04