Проблема с реализацией паролей - PullRequest
0 голосов
/ 20 марта 2019

У меня есть три роли:

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! == ....)?

Или как это сделать правильно, если я не правильно поставил выше.

...