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-sign',
- 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 '当前用户组没有对应权限';
- }
- }
|