Как правильно сделать модель юзеров с ролями? Есть ли примеры/практики авторизации с ролями?

К примеру, есть модель User

const userSchema =  new mongoose.Schema ({
  email: {
    type: String,
    unique: true,
    required: true,
    trim: true
  },
  password: {
    type: String,
    required: true
  },
  username: {
    type: String,
    unique: true
  },
  firstName: String,
  lastName: String,
  createdAt: {
    type: Date,
    default: Date.now
  }
})


Различные туториалы и статьи покрывают лишь базовую ауторизацию, и совершенно не касаются такой темы как роли пользователей. А мне надо, к примеру, админы и просто пользователи.

Я конечно могу добавить просто это

role: {
    type :String,
    default: 'reader'
  }


И просто в строку писать admin или reader. Но это выглядит слишком примитивно. и я уверен что есть некие практики как должно все быть устроено. Дайте пожуйста ссылку или расскажите как надо?
  • Вопрос задан
  • 635 просмотров
Пригласить эксперта
Ответы на вопрос 3
planc
@planc
const ADMIN = 0b11111111

const CAN_DELETE = 0b00001000
const CAN_EDIT =   0b00000100
const CAN_WRITE =  0b00000010
const CAN_READ =   0b00000001

const REGULAR_USER = CAN_WRITE | CAN_READ
const ANONYMOUS = CAN_READ
const BANNED = 0b0

const MODERATOR = REGULAR_USER | CAN_EDIT | CAN_DELETE

class User {
  constructor(name, mask) {
    this.name = name;
    this.mask = mask;
  }
}


const users = [
  new User('admin', ADMIN),
  new User('moder', MODERATOR),
  new User('regular_user', REGULAR_USER),
  new User('anon', ANONYMOUS),
]


users.forEach( u => {
  console.log(u.name);
  if ((u.mask & ADMIN) === ADMIN) {
    console.log('\t ADMIN');
  }
  if ((u.mask & MODERATOR) === MODERATOR) {
    console.log('\t MODERATOR');
  }
  if ((u.mask & REGULAR_USER) === REGULAR_USER) {
    console.log('\t REGULAR_USER');
  }
  if ((u.mask & CAN_EDIT) === CAN_EDIT) {
    console.log('\t CAN_EDIT');
  }
  if ((u.mask & CAN_DELETE) === CAN_DELETE) {
    console.log('\t CAN_DELETE');
  }
  if ((u.mask & CAN_WRITE) === CAN_WRITE) {
    console.log('\t CAN_WRITE');
  }
  if ((u.mask & CAN_READ) === CAN_READ) {
    console.log('\t CAN_READ');
  }
});


admin
	 ADMIN
	 MODERATOR
	 REGULAR_USER
	 CAN_EDIT
	 CAN_DELETE
	 CAN_WRITE
	 CAN_READ
moder
	 MODERATOR
	 REGULAR_USER
	 CAN_EDIT
	 CAN_DELETE
	 CAN_WRITE
	 CAN_READ
regular_user
	 REGULAR_USER
	 CAN_WRITE
	 CAN_READ
anon
	 CAN_READ
Ответ написан
@ru-soft
https://aspnetboilerplate.com/ Пример реализации и документация Для Node.Js можно позаимствовать структуру моделей и логику проверки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Cindx Москва
от 90 000 до 140 000 руб.
Abagy Robotic Systems Москва
от 120 000 до 200 000 руб.
от 200 000 до 300 000 руб.
19 нояб. 2018, в 19:24
1 руб./за проект
19 нояб. 2018, в 18:45
10000 руб./за проект