//中间件

import jwt from "jsonwebtoken";import {resultFail} from "../common/utils";import {SECRET} from "./auth.controller";import {OPTION} from "./auth.controller";import {ADMIN, NORMAL} from "../common/constants";export let verifyAdmin = function (req, resp, next) {  try {    const token = req.get("authorization").slice("Bearer ".length);    jwt.verify(token, SECRET, (error, res) => {      if (error) {        resp.status(401).json(resultFail(error) );        return;      }      console.log(OPTION.role)      if (OPTION.role===ADMIN){        next();      }else{        return resp.status(401).json(resultFail(('No Permission')));      }    });  } catch (e) {    return resp.status(401).json(resultFail(e));  }};export let verifyNormal = function (req, resp, next) {  try {    const token = req.get("authorization").slice("Bearer ".length);    jwt.verify(token, SECRET, (error, res) => {      if (error) {        res.status(401).json(resultFail(error) );        return;      }      if (OPTION.role===NORMAL){        next();      }else{        res.status(401).json(resultFail(('No Permission')));      }    });  } catch (e) {    return resp.status(401).json(resultFail(e));  }};

管制层接口

'use strict';import { Router } from 'express';import DevicesController from './devices.controller';import {verifyAdmin} from "./auth.middleware";const router = new Router();router.route('/').post(DevicesController.apiGetDevices);router.route("/get-grouped-devices").post(DevicesController.apiGetGroupedDevices);router.route("/alias").post(verifyAdmin, DevicesController.apiSetDeviceAlias);export default router;

//登录接口

export let SECRET;export let OPTION;export default class AuthController {  static async login(req, res) {    try {      const { name, password } = req.body;      if (!name || typeof name !== "string") {        res.status(400).json(resultFail("Bad name format, expected string."));        return;      }      if (!password || typeof password !== "string") {        res.status(400).json(resultFail("Bad password format, expected string."));        return;      }      let userFromDB = await AuthDAO.getUser(name);      if (!userFromDB) {        res.status(401).json(resultFail("Make sure your name is correct."));        return;      }      const user = new AuthUser(userFromDB);      if (!(await user.comparePassword(password))) {        res.status(401).json(resultFail("Make sure your password is correct."));        return;      }        OPTION = {          token: user.encoded(),          userName: userFromDB.name,          role: userFromDB.privilege        }        res.send(resultSuccess({          auth_token: OPTION.token,          ...user.toJson()        }))    } catch (e) {      res.status(400).json(resultFail(e));    }  }}