若依代码生成的有些菜单不是管理员应该有的,怎么处理

申明:方法是本人摸索出来的,不是官方文档的方法(野路子)。

问题描述:

在使用若依自带的代码生成工具生成页面,即使是管理员不该拥有的页面也会渲染在页面上。比如比赛评审什么的,你既是“活动发布者”又是“参赛者”,这怎么玩?

解决思路:

方法一:后端解决方法

找到获取路由的方法:

3cc55f2388f646d59c513d1475446f65.png

在后端工程查找该方法

com.ruoyi.web.controller.system.SysLoginController#getRouters 

90fe0b6cf93d4edb87b9d03ec916a8c1.png

我是在前端处理的,后端代码就不演示处理逻辑了 

方法二:前端解决方案

找到permission文件的filterAsyncRouter方法,定义excludeTitles数组用于存储需要删除的路由的标题,在后方添加角色判断,如果是admin执行什么操作。

3f108149545647bcaae34f210790ecb3.png

顺带一提,这个方法即使是管理员知道路径也无法访问被屏蔽掉的页面 

实际解决办法: 

导入工具函数

5a2298e8c54d495fa7b9a8c0fd51dfab.png

import { checkRole } from '../../utils/permission'

 正式处理逻辑

const excludeTitles = ['活动申报','已申报的项目']; // 需要排除的路由标题数组

function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
  return asyncRouterMap.filter(route => {
    if (type && route.children) {
      route.children = filterChildren(route.children)
    }
    if (route.component) {
      // Layout ParentView 组件特殊处理
      if (route.component === 'Layout') {
        route.component = Layout
      } else if (route.component === 'ParentView') {
        route.component = ParentView
      } else if (route.component === 'InnerLink') {
        route.component = InnerLink
      } else {
        route.component = loadView(route.component)
      }
    }
    if (route.children != null && route.children && route.children.length) {
      route.children = filterAsyncRouter(route.children, route, type)
    } else {
      delete route['children']
      delete route['redirect']
    }
    // 检查当前用户是否是管理员
    if (checkRole(['admin'])) {
      // 如果是管理员,删除在excludeTitles数组中的路由项
      if (route.meta && excludeTitles.includes(route.meta.title)) {
        return false
      }
    }
    return true
  })
}

 

个人看法: 

管理员拥有所有方法的数据权限,要解决的话或许可以在需要的方法上添加:

@PreAuthorize("@ss.lacksRole('admin')")

排除管理员的操作。

个人看法!如有错误欢迎指正。

最后:如果有更好的解决方案的话...... 教教我~~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值