首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flask-Appbuilder -视图中需要的用户安全角色

Flask-Appbuilder -视图中需要的用户安全角色
EN

Stack Overflow用户
提问于 2019-05-06 04:55:16
回答 2查看 721关注 0票数 1

如果当前用户角色= admin,则显示表中的所有记录。如果不是,则按创建的用户限制行数。

如果我在View类中定义了一个函数,我可以获得用户名,但在构造列表之前需要它。请参阅下面的源代码。

代码语言:javascript
复制
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from app import appbuilder, db
from app.models import Language
from wtforms import validators, TextField
from flask import g
from flask_appbuilder.security.sqla.models import User

def get_user():
    return g.user

class LanguageView(ModelView):
    datamodel = SQLAInterface(Language)
    list_columns = ["id", "name"]
    base_order = ("name", "asc")
    page_size = 50

    #This is the part that does not work - unable to import app Error: Working outside of application context
    #If the user role is admin show all, if not filter only to the specific user
    if g.user.roles != "admin":
        base_filters = [['created_by', FilterEqualFunction, get_user]]    

这是我得到的错误:

无法导入应用程序错误:在应用程序上下文之外工作。

这通常意味着您试图以某种方式使用与当前应用程序对象交互所需的功能。要解决此问题,请使用app.app_context()设置应用程序上下文。有关详细信息,请参阅文档。

EN

回答 2

Stack Overflow用户

发布于 2021-02-05 20:21:04

在这种情况下,最好创建两个不同的ModelViews,一个用于具有base_filters = [['created_by', FilterEqualFunction, get_user]]的用户,另一个仅用于没有任何过滤的管理员。

并且不要忘记为这两个都指定正确的权限。

票数 0
EN

Stack Overflow用户

发布于 2021-03-30 13:33:30

在我的例子中,我通过复制FilterStartsWith创建了新的过滤器FilterStartsWithFunction (您可以很容易地在Flask-Appbuilder包中找到源代码。)。请参阅代码

代码语言:javascript
复制
from flask_appbuilder.models.sqla.filters import get_field_setup_query

class FilterStartsWithFunction(BaseFilter):
    name = "Filter view with a function"
    arg_name = "eqf"

    def apply(self, query, func):
        query, field = get_field_setup_query(query, self.model, self.column_name)
        return query.filter(field.ilike(func() + "%"))

def get_user():
    if 'Admin' in [r.name for r in g.user.roles]:
        return ''
    else:
        return g.user.username

...
...

    base_filters = [['created_by',FilterStartsWithFunction,get_user]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55996335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档