У меня есть три роли:
1) User
2) Merchant
3) Admin
Каждая роль имеет свой собственный маршрут авторизации:
1) .../api/users/singin
2) .../api/merchants/singin
3) .../api/admins/singin
У меня также есть ресурсы:
1) Products
Но будет добавлено больше ресурсов.
Продукты могут быть удалены, отредактированы, добавлены.
Например, я захожу по маршруту .../api/merchants/singin
для продавца и выдаю токен:
import jwt from 'jsonwebtoken';
import config from './../config';
router.post('/singin', async (req, res) => {
const JWTToken = jwt.sign({
...
roles: 'merchant',
}, config.keySecret.secret, {
expiresIn: config.keySecret.expires
}
);
...
return res.status(200).json({
token: JWTToken
});
});
Для администратора и пользователя структура одинакова, меняются только роль и информация о пользователе и продавце.
Я отправил клиенту токен продавца, содержащийинформация о продавце и его merchant
роли.
Администратор имеет все права, продавец может только добавлять товары, изменять и удалять, пользователь может только просматривать товары.
Сейчастокен продавца приходит ко мне от клиента и по маршруту, например, добавляя товар:
router.post('/add', async (req, res) => {
jwt.verify(
req.headers.token, config.keySecret.secret, (err) => {
if (err, decoded) {
return res.status(401).json({
name: 'TokenExpiredError',
message: 'jwt expired'
});
}
if (decoded.role !== 'merchant') {
res.status(200).json({
err: 'Not accessing this role'
});
}
....
});
У меня проблемы с этого момента.
Как проверить, что роль имеет право на добавление продукта?Что может только посмотреть товар?Как проверить, что у нее есть все права?Теперь только продавец может добавить товар.Как сделать так, чтобы администратор добавил товар, мне не нужно писать такую структуру на каждом маршруте?Поскольку у меня не только продукты будут.
if (decoded.role !== 'merchant' || 'admin') {
res.status(200).json({
err: 'Not accessing this role'
});
}
Или когда вам нужно увидеть список продуктов:
if (decoded.role !== 'merchant' || 'admin' || 'user') {
res.status(200).json({
err: 'Not accessing this role'
});
}
Как реализовать доступ к ролям, чтобы мне не пришлосьнаписать if (decoded.role! == ....)
?
Или как это сделать правильно, если я не правильно поставил выше.