| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | 'use strict';module.exports = option => {    /**     * 用户权限筛选中间件     *     * @param {function} next - 中间件继续执行的方法     * @return {void}     */    return function* permissionFilter(next) {        // 获取所有权限数据        const permissionData = yield this.service.permission.getAllData(true, true);        this.currentName = '';        let currentPermissionId = 0;        // 查找controller和action名称相同的数据        for (const index in permissionData) {            if (permissionData[index].controller === this.controllerName && permissionData[index].action === this.actionName) {                this.currentName = permissionData[index].name;                currentPermissionId = permissionData[index].id;                break;            }        }        // 如果页面没有录入db,则允许通过,否则进入权限判断        if (currentPermissionId > 0) {            // 查找当前用户是否有对应页面权限            const managerSession = this.session.managerSession;            const permission = managerSession.permission;            try {                checkPermission(permission, currentPermissionId);            } catch (error) {                this.session.message = {                    type: 'error',                    icon: 'exclamation-circle',                    message: error.toString(),                };                return this.redirect('/dashboard');            }        }        // 找出对应页面的最顶层id        this.permissionRootId = 0;        this.service.permission.getTopPid(currentPermissionId, permissionData);        // 查找最顶层数据        this.topPermission = yield this.service.permission.getCacheDataById(this.permissionRootId);        this.currentName = this.currentName === '' ? '后台管理' : this.currentName;        yield next;    };};/** * 判断权限 * * @param {String} permissionList - 当前用户权限字符串 * @param {Number} currentPermissionId - 当前被访问页面的权限id * @return {void} */function checkPermission(permissionList, currentPermissionId) {    if (permissionList === '') {        throw '用户组权限为空';    }    // 如果是超级管理员则直接返回    if (permissionList === 'all') {        return;    }    const permissionIdList = permissionList.split(',');    if (permissionIdList.indexOf(currentPermissionId + '') < 0) {        throw '当前用户组没有对应权限';    }}
 |