Авторизация на уровне свойства / поля в REST API - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю REST Api с использованием стека MEAN и аутентификацией на основе токена jwt, в которой у меня на данный момент есть 3 роли (или тип пользователя), а именно: Admin , Менеджер и Worker

Все типы пользователей хранятся в 1 коллекции с именем Users , чтобы упростить процесс входа в систему, поскольку для поиска учетных данных потребуется только 1 коллекция
Для всех типов пользователей существует только 1 портал авторизации.

В коде у меня есть конечная точка / маршрут с именем
/ api / user POST, который используется для добавления любого данного типа пользователя

Модели / схемы для каждого типа пользователя:

Администратор

{
_id:1,
email:"admin@xyz.com",
name:"Admin User",
password:"xyz",
role:"Admin"
}

Менеджер пользователя

{
_id:2,
email:"manager@xyz.com",
name:"Manager User",
password:"xyz",
role:"Manager"
}

Рабочий Пользователь

{
_id:3
email:"worker@xyz.com",
name:"Worker User",
password:"xyz",
manager:2,
role:"Worker"
}

Администратор может добавить любого типа пользователя (либо менеджер, либо рабочий)
Менеджер может добавить только рабочий.

Теперь Worker - обычный пользователь, которого может добавить менеджер или администратор. Если менеджер добавляет работника, поле manager в работнике объекта должно хранить идентификатор менеджера, который добавляет его. Но если администратор добавляет работника, будет выпадающий список всех менеджеров, которых он выберет, и явно отправит идентификатор менеджера с другими полями.

Итак, теперь моя проблема в том, как я могу проверить и ограничить поля в зависимости от роли пользователя.
Также, как эти поля (выпадающие менеджеры в случае администратора )

Примечание: я не хочу использовать регистры переключения или операторы if else в обработчике маршрута, так как в будущем будет больше пользовательских ролей (в идеале 12 пользовательских ролей). Поэтому было бы очень сложно поддерживать код с таким количеством операторов if else. (Я использовал if / else в старом коде и в итоге я написал так много операторов if / else). Поэтому я ищу более лучшее и эффективное решение для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...