电商项目中的用户权限中间件,借鉴思想!

let permissions = [

    {

        role: 0,// 普通商家用户

        urls: [

            /\/category.*/,

            /\/product.*/,

            /\/order.*/

        ]

    }, {

        role: 100,// 管理员

        urls: [

            /.*/

        ]

    }

];

// 权限的校验

module.exports = (request, response, next) => {

    // 获取当前用户要请求的Url地址

    let reqUrl = request.url;

    // 获取用户

    let user = request.user;

    // 对登录状态的用户进行权限的校验

    if (user) {

        // 标志位,标记用户是否能够访问对应的地址,默认值是不允许访问

        let isGo = false;

        // 循环权限的数组

        outer:for (let i = 0; i < permissions.length; i++) {

            let permission = permissions[i];

            // 如果当前用户的角色 = 当前权限的角色

            if (user.role === permission.role) {

                // 遍历当前权限能够访问的URL地址

                let urls = permission.urls;

                for (let j = 0; j < urls.length; j++) {

                    let url = urls[j];

                    // 比对当前遍历到的正则表达式是否匹配,当前用户要访问的url地址

                    if (url.test(reqUrl)) {

                        // 如果匹配成功,修改标志位,说明用户可以访问,此时可以跳出循环

                        isGo = true;

                        break outer;

                    }

                }

            }

        }

        // 整个循环结束以后,如果发现用户没有权限访问对应的url地址,就抛出异常

        if (!isGo) {

            throw Error("您没有权限访问对应的地址");

        }

    }

    // 放行的代码

    next();

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容