如何在UmiJS中根据用户权限动态渲染菜单?

本文介绍了如何在Vue/React应用中使用AntDesign框架实现自定义路由菜单,通过access属性和API检查用户权限,确保只有具备相应权限的用户才能访问特定功能。同时展示了如何在组件层面根据用户权限进行功能显示或隐藏。
摘要由CSDN通过智能技术生成

1.路由,在路由配置用
access属性来指定用户需要哪些权限才能访问这个路由

// 
export default {
  // 其他配置...
  routes: [
    { path: '/foo', component: '@/pages/foo', access: 'canReadFoo' },
    // 其他路由配置...
  ],
  // 其他配置...
};

2.access.ts文件

export default function access(initialState: { currentUser?: API.CurrentUser } | undefined) {
  // console.log('access', initialState)
  const { currentUser,  privilege     } = initialState ?? {};
  if(!currentUser) {
    return {}
  }
  // creator true
  if(currentUser.creator) {
    if(privilege)  {
      let obj = {} as any
      privilege.map(it => {
        obj[it.module] = it.actions
      })
      return obj
    }
  }else {
    const role = currentUser.role.privilege as {[key:string]: string[]}

    return role
 
  }
  return { };
}

3.自控路由菜单
ant design中的app.tsx中配置menuDataRender

import { useModel } from 'umi';

export default {
  // 其他配置...
  menuDataRender: () => {
    const { initialState } = useModel('@@initialState');
    const { currentUser } = initialState;

    return routes => routes.filter(route => {
      // 如果路由没有 access 属性,那么这个路由对所有用户都是可见的
      if (!route.access) return true;

      // 如果路由有 access 属性,那么我们需要检查用户是否有访问这个路由的权限
      return currentUser && currentUser.permissions.includes(route.access);
    });
  },
  // 其他配置...
};

4.在各个组件中,根据权限,是否显示个别功能,比如,是否有编辑权限?

// 可以在urils/api.ts 文件中写个方法。
import { request, useAccess, useModel } from '@umijs/max';

export const useEditPrivilege = (name:string) => {
  const access = useAccess() as {[key:string]: string[]}
  // .includes('编辑') 这个不一定,要根据后台的接口情况,我们写一些判断逻辑
  const hasEdit = access?.[name] && access.[name].includes('编辑')
    return hasEdit
}

组件中运用

cons Index = () => {
    const hasEdit = useEditPrivilege('告警处理')
	return hasEdit ? '有权限':'没有权限'
}

export default Index

谢谢大家~

参考资源链接:[基于SpringBoot+Vue+Uniapp的多端商城系统开发教程](https://wenku.csdn.net/doc/6edciiy9gf?utm_source=wenku_answer2doc_content) 在构建多端商城系统时,实现基于用户权限动态菜单展示是一个重要的功能,它能够确保用户界面与用户权限相匹配,提供定制化的用户体验。以下是实现该功能的详细步骤和机制: 1. 权限设计:首先,需要在后端SpringBoot应用设计权限模型。通常,可以创建角色(Role)、权限(Permission)和用户(User)的关联关系。每个角色可以拥有多个权限,而用户则关联到特定的角色。 2. 菜单数据结构:设计一个菜单的数据结构,该结构应当包含菜单项的信息,如名称、路径、父级菜单等。同时,需要标记哪些菜单项需要基于权限控制。 3. 权限控制接口:在SpringBoot后端实现一个API接口,该接口负责返回当前用户所拥有的菜单项列表。接口逻辑包括查询用户的角色,根据角色获取权限,最后返回匹配的菜单项。 4. 菜单展示逻辑:在前端Vue.js项目,创建一个动态菜单组件。该组件通过调用后端的权限控制接口获取菜单数据,并根据返回的数据动态渲染菜单。 5. 菜单权限校验:在前端组件实现权限校验逻辑,确保用户在访问特定路由或菜单项前,已经具备相应的权限。如果用户尝试访问无权限菜单项,系统应拦截并给出提示。 6. 动态更新:当用户权限发生变化时,例如管理员为用户分配了新的角色或权限,系统应该能够即时更新用户界面,确保菜单项与用户权限同步。 整个实现过程,可以使用Vue.js的动态组件和条件渲染功能,结合响应式的数据绑定,有效地实现动态菜单的功能。同时,后端的接口需要确保安全性和数据的准确性,防止未授权访问。 为了更深入地理解和掌握这一过程,推荐阅读《基于SpringBoot+Vue+Uniapp的多端商城系统开发教程》。该教程提供了丰富的案例和源码,不仅可以帮助你完成动态菜单与系统权限管理的集成,还能助你构建一个完整的多端商城系统。 参考资源链接:[基于SpringBoot+Vue+Uniapp的多端商城系统开发教程](https://wenku.csdn.net/doc/6edciiy9gf?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值