如何为mongoengine文档实现Flask-RBAC?

How to implement Flask-RBAC for mongoengine Document?

我有一个现有的项目,我在其中使用 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是继承Documentclass制作的。但是从flask-RBAC的文档来看,他们使用的是db.Model。我发现很难按照文档来合并 RBAC,或者我可能错过了一件非常简单的事情。谁能帮我解决这个问题?

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

谢谢你的问题,我会试着在这里概述一下。

flask-rback documentation where they use db.Model states that "However, if your application is working under SQLAlchemy, and you want to save the roles in database, you need to override the Role class to adapt your application". In the example, the db connection is probably done using, e.g., flask-sqlalchemy as described in this minimal example。但是,纯 flask-sqlalchemy 不适用于 MongoDb.

因为您正在使用 Mongoengine, it has an extension 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
    

并在示例中使用 Mongoengine 的 ReferenceField 而不是 db.relationship

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

干杯!