2017-01-20 5 views
0

Я создаю веб-приложение в NodeJS (используя TypeScript) и MongoDB (используя mongoose).Выполнение пользовательских разрешений

В моем приложении у меня есть 6 типов разрешений. Для простоты можно использовать P1, P2, ..., P6 для представления моих разрешений.

Кроме того, приложение имеет несколько организаций.

Каждый пользователь приложения относится к одной организации и может иметь несколько разрешений (P1-P6) для каждой организации (не обязательно тот, к которому он принадлежит).

Например:

  • пользователь U1 'принадлежит к организации 'О1', имеет разрешение P1, P3 в организациях 'O1' и разрешение P2, P6 в организациях 'O2'.
  • Пользователь 'U2' принадлежит к организации 'O2', имеет разрешение P1 в организации 'O2'.
  • Пользователь 'U3' принадлежит к организации 'O1', не имеет разрешений.

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

Это мой пользователь схема:

var userSchema: mongoose.Schema = new mongoose.Schema({ 
    _id: { 
     type: String 
    }, 
    firstName: { 
     type: String, 
     required: true 
    }, 
    lastName: { 
     type: String, 
     required: true 
    }, 
    mail: { 
     type: String, 
     required: true, 
     unique: true 
    }, 
    organization: { // User's organization 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'Organization' 
    }, 
    permissions: [{ 
     organization: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: 'Organization' 
     }, 
     permissions: [{ 
      type: String, 
      enum: [ 
       Permission.P1, 
       Permission.P2, 
       Permission.P3, 
       Permission.P4, 
       Permission.P5, 
       Permission.P6, 
      ] 
     }] 
    }] 
}); 

Для перечисления разрешений я использую:

export enum Permission { 
    P1 = <any>'P1', 
    P2 = <any>'P2', 
    P3 = <any>'P3', 
    P4 = <any>'P4', 
    P5 = <any>'P5', 
    P6 = <any>'P6', 
} 

Я использую это перечисление как строковые значения, потому что я считаю, что лучше иметь строковое значение а не только значения числа перечислений (1-6). Конечно, имена прав (P1-P6) заменяются реальным именем разрешения - например, P1 является Администратором.

Я не уверен в моей текущей реализации и хотел бы получить некоторые мнения о том, делаю ли я добро, или что-то изменить.

Пожалуйста, не стесняйтесь критиковать мой код и образ мыслей.

Thanks,

Ron.

ответ

0

Вы также можете просто добавить роль непосредственно на свой userSchema. Так что-то вроде этого? Разве каждая организация собирается настроить свои разрешения?

var userSchema = new mongoose.Schema({ _id: { type: String }, firstName: { type: String, required: true }, lastName: { type: String, required: true }, mail: { type: String, required: true, unique: true }, organization: { // User's organization type: mongoose.Schema.Types.ObjectId, ref: 'Organization' }, admin :{type:Boolean}, superAdmin :{type:Boolean}, globalAdmin :{type:Boolean} })

+0

Каждая организация может изменить права доступа пользователей, поэтому этот метод не очень подходит мне ... – Ron537