Создание пользовательской схемы MongoDB с определенными привилегиями для каждого региона - PullRequest
0 голосов
/ 01 декабря 2018

Мне нужно создать страницу для ввода некоторых данных о людях в определенных регионах.У каждого пользователя будут привилегии в определенном регионе.

Так что я сделаю две коллекции в БД.Один для пользователей и один для регионов.

Пользователи будут иметь доступ только к одному региону (или, в некоторых случаях, к большему количеству) и конкретным доступам, таким как чтение или запись, чтение и запись и т. Д.

Как мне смоделировать мою схему, чтобы я мог добавить больше областей?

Вот как я это сделал:

var mongoose = require("mongoose"), 
    passportLocalMongoose = require("passport-local-mongoose");

let userSchema = new mongoose.Schema({
    username:
    {type: String,
    unique: true
    },
    password: String,
    privileges:
    {
        regiune: [Number],
        read: [Number],
        write: [Number],
        edit: [Number]
    }
});

userSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("User", userSchema);

но я не знаю, как мне отредактировать эту модель, чтобы она могла иметь несколько регионов с разными привилегиями.Для обычных пользователей у них может быть один регион с чтением, записью и редактированием, скажем так.Но если я хочу, чтобы другой пользователь имел доступ к региону x с правами чтения, записи и региону y с правами записи, я не смогу сделать это с помощью этой схемы.

Так как мне это редактировать?(также я новичок в базах данных, поэтому, если есть другой лучший способ установить привилегии, пожалуйста, дайте мне знать)

Спасибо!

1 Ответ

0 голосов
/ 02 декабря 2018

На самом деле, поскольку поле привилегий принадлежит каждому пользователю, вы можете легко иметь несколько регионов с разными привилегиями

Превратить привилегии в массив и каждое конкретное разрешение в число, и вы получите его!

   privileges:
    [{
        regiune: Number,
        read: Number,
        write: Number,
        edit: Number
    }]

Массив объектов - это идиоматический способ моделирования зависимых объектов в Mongo.Люди обычно рекомендуют не иметь неограниченный массив в качестве вложенного документа, но я держу пари, что ваш список регионов является относительно конечным.

Возможно, вы захотите ввести какой-то механизм, обеспечивающий наличие уникальных режимов в массиве.В Mongo 4.10 появился плагин для этого: https://www.npmjs.com/package/mongoose-unique-array, который вы можете использовать следующим образом:

privileges:
    [{
        regiune: { type: Number, unique: true },
        read: Number,
        write: Number,
        edit: Number
    }]

Если вы хотите получить доступ к своим разрешениям как к объекту, по ключу: region1, region3 и т. Д.Тогда вы можете объявить привилегии как смешанный тип, то есть это может быть любая произвольная структура json (но вы потеряете информацию о типе).Или вы можете сделать это отдельной моделью, коллекцией с обратным указателем на объект пользователя.Пользовательский объект также может иметь список ссылок на эту новую модель (но это снова будет массив, а не объект).

...