Flask admin:区分视图之间的可访问性

Flask admin:区分视图之间的可访问性,flask,flask-admin,Flask,Flask Admin,我想区分flask admin中视图的可访问性(索引、创建、编辑)。通过覆盖方法:is\u accessible,可以在与特定模型相关的所有视图的级别上执行此操作 def is_accessible(self): return current_user.is_authenticated # using flask-login 我需要一些用户能够浏览数据,但没有创建新记录的权限。另外,rhand和其他用户应该能够创建 和编辑记录。任何帮助都将不胜感激 解决方案 我重写了在每个视图之前调用

我想区分flask admin中视图的可访问性(索引、创建、编辑)。通过覆盖方法:is\u accessible,可以在与特定模型相关的所有视图的级别上执行此操作

def is_accessible(self):
    return current_user.is_authenticated # using flask-login
我需要一些用户能够浏览数据,但没有创建新记录的权限。另外,rhand和其他用户应该能够创建 和编辑记录。任何帮助都将不胜感激

解决方案

我重写了在每个视图之前调用的_handle_view方法

def _handle_view(self, name, **kwargs):
    if not current_user.is_authenticated:
        return self.unauthorized_access()

    permissions = self.get_permissions(name)
    if not current_user.can(permissions):
        return self.forbidden_access()

    return None #access granted

Flask User
似乎是您想要的。您可以指定一个
UserRoles
类、一个
Roles
类和一个您已经拥有的
User
类。您将
UserRole
分配给
User
,然后在
is\u accessible
方法中,可以根据您的角色区分您想要做什么(读/写/编辑)


Flask User
似乎是您想要的。您可以指定一个
UserRoles
类、一个
Roles
类和一个您已经拥有的
User
类。您将
UserRole
分配给
User
,然后在
is\u accessible
方法中,可以根据您的角色区分您想要做什么(读/写/编辑)


它没有很好的文档记录,但我认为您可以覆盖ModelView类上的
is\u action\u allowed
方法,以获得所需的行为。API文档对此没有太多说明,但我在引入时发现了一个更好的示例:

您可以通过以下方式控制哪些操作可用于当前请求: 重写是\u操作\u允许的方法:

from flask.ext.admin.actions import action

class MyModelAdmin(ModelAdmin):
    def is_action_allowed(self, name):
        if name == 'merge' and not user.superadmin:
            return False

        if name == 'delete' and not user.admin:
            return False

        return super(MyModelAdmin, self).is_action_allowed(name)

我自己也没有尝试过,因此我无法证明该示例在没有其他更改的情况下是否真的有效。

它的文档记录不是很好,但我认为您可以覆盖ModelView类上的
is\u action\u allowed
方法,以获得所需的行为。API文档对此没有太多说明,但我在引入时发现了一个更好的示例:

您可以通过以下方式控制哪些操作可用于当前请求: 重写是\u操作\u允许的方法:

from flask.ext.admin.actions import action

class MyModelAdmin(ModelAdmin):
    def is_action_allowed(self, name):
        if name == 'merge' and not user.superadmin:
            return False

        if name == 'delete' and not user.admin:
            return False

        return super(MyModelAdmin, self).is_action_allowed(name)
我自己还没有尝试过这个,所以我无法证明这个例子在没有其他改变的情况下是否真的有效