导航栏中项目的Flask Admin自定义权限

时间:2019-09-03 13:19:51

标签: flask flask-admin

我在弄清楚如何向导航项添加自定义权限时遇到了麻烦,因此某些项将在用户登录/注销或满足其他参数时显示(例如,用户属于某些组织)。

任何帮助或示例将不胜感激。

2 个答案:

答案 0 :(得分:0)

使用flask_security软件包,您可以为用户设置角色,并在flask_admin视图中对其进行检查,如下所示:

from http import HTTPStatus

from flask_admin.contrib.sqla import ModelView
from flask_security import current_user, url_for_security

from flask import abort, redirect, request

class AdminSecurityMixin:
    allowed_roles = []

    def is_accessible(self):
        return current_user.is_active and current_user.is_authenticated and \
            (current_user.has_role('admin') or any(current_user.has_role(r) for r in self.allowed_roles))

    def _handle_view(self, name, **kwargs):
        if not self.is_accessible():
            # if user is logged in, but can't view the admin, reject access
            if current_user.is_authenticated:
                abort(HTTPStatus.FORBIDDEN)
            # otherwise redirect to the admin login view
            # the next parameter is so we can redirect them after they'ved
            # logged in to where they wanted to go originally
            return redirect(url_for_security('login', next=request.url))
        return None


class SecuredModelView(AdminSecurityMixin, ModelView):
    allowed_roles = ['custom_role']

现在,在SecuredModelView中注册的模型只有在登录后并已分配custom_roleadmin角色的用户才能在管理面板中访问。

可以使用以下命令创建角色并将其添加到现有用户:

$ flask roles create custom_role

$ flask roles add <your user email> custom_role

答案 1 :(得分:-1)

我想您已经有一个至少包含一个用户表的数据库。

我认为您只想设计模板。 我邀请您关注有关模板的Flask tutorial。它将为您介绍模板语言useEffect(() => { if (authData.isInitializing || authData.user === null) return; const ref = firebase.db.doc("/env/" + process.env.REACT_APP_FIRESTORE_ENVIRONMENT + "/users/" + authData.user.uid); return ref.onSnapshot(doc => { setAuthData({ ...authData, userinfo: doc.data() }); }); }, []);