MongoDB — 3 типа ролей

#database #mongodb

#База данных #mongodb

Вопрос:

У меня здесь есть модель пользователя, которая в настоящее время имеет только 2 возможные роли. Один — администратор, а другой — обычный пользователь.

 const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    isAdmin: {
        type: Boolean,
        required: true,
        default: false
    }
}, { timestamps: true
})
  

Как вы можете видеть, если для параметра isAdmin было установлено значение true, он автоматически станет администратором, в противном случае это обычный пользователь.

Но все меняется, когда я добавляю новую роль, например: isOwner то есть я снова добавляю новое поле:

 const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    isAdmin: {
        type: Boolean,
        required: true,
        default: false
    },
isOwner: {
        type: Boolean,
        required: true,
        default: false
    },, { timestamps: true
})
  

Как вы можете видеть, я добавил новое поле isOwner вверху.

На мой вопрос даны эти три роли: isAdmin , isOwner и обычный пользователь, правильно ли я поступаю, чтобы сделать это и управлять 3 разными ролями? или есть лучший способ сделать это?

Примечание: это работает так, что администратор имеет общий доступ ко всем вакансиям владельца, в то время как обычный пользователь может комментировать только вакансию, опубликованную владельцем (который опубликовал задание)

Ответ №1:

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

справочный документ по массиву

 const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    isAdmin: {
        type: Boolean,
        required: true,
        default: false
    },
    roles: {
        type:[String],
        required: true,
        default:["regular"]
    }
    },
 { timestamps: true
})
  

Комментарии:

1. Как это работает? Можете ли вы разместить пример, основанный на моих потребностях, пожалуйста? Я полный новичок

2. const UserSchema = мангуст. Схема ({ имя: { тип: строка, требуется: true }, адрес электронной почты: { тип: Строка, требуется: true, уникальный: true }, пароль: { тип: Строка, требуется: true }, isAdmin: { тип: логическое значение, требуется: true, по умолчанию: false }, роли: { тип: [Строка], обязательно: true, по умолчанию: [«обычный»] } }, {временные метки: true })

3. Можете ли вы показать мне, как установить это при добавлении новых записей?