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

时间:2017-07-14 11:52:12

标签: flask flask-admin

我想在flask-admin中区分可访问性与视图(索引,创建,编辑)。它可以通过覆盖方法在所有关于特定模型的视图的级别上完成:is_accessible。

def is_accessible(self):
    return current_user.is_authenticated # using flask-login

我需要一些用户能够浏览数据,但无权创建新记录。在其他用户应该能够创建 并编辑记录。任何帮助将不胜感激。

解决方案

我已经覆盖了每个视图之前调用的_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

2 个答案:

答案 0 :(得分:2)

它没有很好的文档,但我认为你可以覆盖ModelView类上的sqoop import jdbc:mysql://localhost/mysql --username root --password cloudera --table uberdata --hbase-table myuberdatatable --column-family trip_details --hbase-row-key base -m 1** 方法来获得你想要的行为。 API文档没有对此进行太多说明,但我在changenotes引入时发现了一个更好的示例:

  

您可以控制哪些操作可用于当前请求   重写is_action_allowed方法:

is_action_allowed

我自己没有试过这个,所以我无法证明这个例子是否真的有效而没有其他变化。

答案 1 :(得分:0)

Flask-User似乎就是你想要的。您指定了一个UserRoles类,一个Roles类和一个User类。您将UserRole分配给User,然后在is_accessible方法中,可以根据您的角色区分您要执行的操作(读/写/编辑)。

https://pythonhosted.org/Flask-User/

# Define User model
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50), nullable=True, unique=True)
    ...
    roles = db.relationship('Role', secondary='user_roles',
            backref=db.backref('users', lazy='dynamic'))

# Define Role model
class Role(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50), unique=True)

# Define UserRoles model
class UserRoles(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE'))
    role_id = db.Column(db.Integer(), db.ForeignKey('role.id', ondelete='CASCADE'))