简单的例子如何使用烧瓶管理与瓶校长
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