В новом проекте я решил использовать mongodb для основной базы данных, но мой неопытность с ним привела к некоторой путанице в том, как мне следует структурировать отношения между различными коллекциями.
В моем случаеУ меня есть коллекция пользователей, коллекция заметок и коллекция групп.Заметки могут быть открыты для разных пользователей и групп.Если пользователь является частью группы и эта группа имеет доступ для чтения к заметке, то и пользователь тоже.Если пользователь удален из группы, он больше не имеет доступа к заметке.Тем не менее, пользователь может иметь доступ к заметке на индивидуальной основе, и даже если они удалены из группы с доступом, они все равно могут видеть заметку.Надеюсь, это имеет смысл.
Проблема, с которой я сталкиваюсь, заключается в настройке разрешений, чтобы все это было возможно.Должны ли разрешения храниться в коллекции заметок?Если он хранится следующим образом:
note: {id: xxxx, followers:[{id:user1, permission:write},{id:groupA, permission:read}]}
Тогда в случае, когда user2 является частью группы A, мне нужно проверить, связаны ли они с узлом по их идентификатору, а если нет, то яМне нужно будет проверить каждую группу, которая может видеть эту заметку, и посмотреть на их участников, и если разные группы имеют разные разрешения, я должен получить самое высокое разрешение.Это не кажется эффективным.
Коллекция пользователей выглядит следующим образом:
user: {id:user1, projects:[xxxxx, xxxxx], groups:[xxxxx,xxxx...]}
Коллекция групп:
group: {id:groupA, projects:[xxxxx, xxxx...], users:[user2...]}
Я планировал связать документы группыс документами проекта и пользователя, так что если группа будет удалена из проекта, проект будет удален из группы.Похоже, что dbref - лучший способ сделать это.
Я просмотрел лучшие практики и чувствую, что общая структура у меня грязная, но я не могу придумать другой способ сделать это.