Как использовать встроенный контроль доступа MongoDB во Flask? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть приложение Flask, которое использует pymongo для доступа к базе данных mongo и удовлетворения запросов пользователей.Я включил контроль доступа в Монго, и теперь есть несколько пользователей, связанных с различными ролями.Более конкретно, каждый пользователь имеет права на чтение и запись только в определенном подмножестве коллекций в БД.

Я хотел бы, чтобы пользователи входили в приложение и имели доступ только к своему конкретному подмножеству коллекций.Это означает, что каждый пользовательский запрос, которому необходимо извлечь некоторые данные из базы данных, привязывается к (определенному) соединению с проверкой подлинности в базе данных.

Основные расширения типа flask, такие как flask-login и flask-security, похоже, неиспользовать собственный механизм аутентификации MongoDB.

Давно искал, но я не смог решить эту проблему.

Ответы [ 2 ]

1 голос

Согласно документации MongoDB для создания строки подключения.

mongodb://[username:password@]host1[:port1][,...hostN[:portN]]][/[database][?options]]

или

mongodb://myDBReader:D1fficultP%40ssw0rd@mongodb0.example.com:27017/admin

вы можете подключиться к MongoDB с помощью библиотеки PyMongo .

from pymongo import MongoClient
from flask import Flask, request

app = Flask(__name__)

@app.route('/login')
def login():
    data = request.get_json()
    username = data['username']
    password = data['password']
    database = data['database']
    uri = 'mongodb://'+username+':'+password+'@localhost:27017/'+database
    print(uri) 
    app.config['uri'] = uri


@app.route('/some_endpoint')
def do_some_work():
    uri = app.config['uri']
    client = MongoClient(uri)
    # now use this as per your requirement.       

    client.close() 

if __name__ == '__main__':
    app.run()

это всего лишь пример. Вы можете сохранить его в app.config и использовать по своему усмотрению.

Еще одна ссылка , которую вы, возможно, захотите увидеть.

0 голосов
/ 01 июня 2019

Возможно, вы захотите пересмотреть этот подход, так как открытие нового соединения БД с каждым пользователем, который входит в ваше приложение, может не очень хорошо масштабироваться, поскольку Mongo создает новый поток для каждого нового соединения.

См .: mongodb-max-connections

Я хотел бы рассмотреть некоторые RBAC для колб, как flask-security .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...