【问题标题】:How to implement Flask-RBAC for mongoengine Document?如何为 mongoengine 文档实现 Flask-RBAC?
【发布时间】:2020-10-28 15:28:51
【问题描述】:

我有一个现有项目,我在其中使用 mongoengine 文档构建了我的模型。现在我想在我的项目中实现基于角色的访问控制。我想将flask-rbac 与我的用户模型一起使用,目前看起来像这样:

class User(Document):
    uuid = UUIDField(primary_key=True, default=Generator.generate_uuid)
    name = StringField(min_length=1, max_length=100, required=True)
    phone_number = StringField(min_length=10, max_length=15, required=True,
                               unique=True, validation=validate_phone_number)
    password = StringField(required=True)

如您所见,我的模型 User 是通过继承 Document 类制成的。但是从flask-RBAC的文档来看,他们使用的是db.Model。我发现很难通过遵循文档来合并 RBAC,或者我错过了一件非常简单的事情。谁能帮我解决这个问题?

我想实现两个角色,管理员和普通用户。

【问题讨论】:

    标签: python flask flask-sqlalchemy rbac flask-mongoengine


    【解决方案1】:

    感谢您的提问,我会尝试在这里概述一些内容。

    他们使用db.Modelflask-rback documentation 声明“但是,如果您的应用程序在 SQLAlchemy 下运行,并且您希望将角色保存在数据库中,则需要重写 Role 类以调整您的应用程序”。在示例中,数据库连接可能使用例如flask-sqlalchemy 完成,如minimal example 中所述。但是,纯 flask-sqlalchemy 不适用于 MongoDb。

    当您使用Mongoengine 时,它有一个扩展名Flask-MongoEngine。使用它,您可以处理与您的应用的连接

    from flask import Flask
    from flask_mongoengine import MongoEngine
    
    app = Flask(__name__)
    db = MongoEngine(app)
    

    那么您可能可以按照 flask-rback 文档声明您 RoleUser 模型

    class User(db.Document, UserMixin):
        # columns
        
    

    在示例中使用 ReferenceField 而不是示例中的 ReferenceField

    我无法从你的问题中推断出所有细节,但我希望这可以帮助你转发你的应用程序!

    干杯!

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多