ant design pro 权限管理

antd权限管理_Ant Design Pro 鉴权/ 权限管理 ant-design-pro 1.0.0 V4最近需要项目需要用扫码登录,因此就使用antd pro提供的鉴权能力来做Authorized.ts提供初始化路由组件和重载路由的函数import RenderAuthorize from '@/components/Authorized';import { getAuthority } from'./authority';/*eslint-disabl... 阅读详情

前言

这段时间一直用ant design pro这个框架开发项目,其中最重要的模块之一应该就是其自带的权限控制功能,现在也来谈谈我对这个模块代码的理解。随着框架的升级,代码部分可能有所改动,但其实现思路和方法应是没有大的变动。

权限管理

config/config.js

首先可以看到只需在config文件中进行路由配置,即能访问对应路由页面

export default {
  ...
  routes: [
    {
      path: '/user',
      component: '../layouts/UserLayout',
      routes: [
        {
          name: 'login',
          path: '/user/login',
          component: './user/login',
        },
      ],
    },
  ...
}

为了统一管理路由配置,我一般单独封装router.config.js文件,通过es6的export import最终配置到config.js文件

router.config

接着看看官网上的应用实例

{
  path: '/',
  component: '../layouts/BasicLayout',
  Routes: ['src/pages/Authorized'],
  authority: ['admin', 'user'],
  routes: [
    // forms
    {
      path: '/form',
      icon: 'form',
      name: 'form',
      routes: [
        {
          path: '/form/basic-form',
          name: 'basicform',
          component: './Forms/BasicForm',
        },
        {
          path: '/form/advanced-form',
          name: 'advancedform',
          authority: ['admin'], //配置准入权限,可以配置多个角色
          component: './Forms/AdvancedForm',
        },
      ],
    },
  ],
}

可以明白只需在路由配置中设置Routes属性,pro 的路由系统中会默认包裹Authorized进行判断处理,而authority属性则代表准入权限组合

Authorize 组件

来到src/pages/Authorize.jsx文件,可以看到它导出的组件包裹了Authorized组件

export default ({ children }) => (
  <Authorized
    authority={children.props.route.authority}
    noMatch={<Redirect to="/user/login" />}
  >
    {children}
  </Authorized>
);

authority属性传入的时该路由页面准入的权限组合,noMatch属性则是传入当用户无访问权限时显示的页面组件。进一步你可以根据用户是否已登录,来控制是跳转到登录页或是一个403错误页面

<Authorized
   authority={getRouteAuthority(location!.pathname, routes)!}
   noMatch={isLogin ? <Redirect to="/exception/403" /> : <Redirect to="/user/login" />}
>
   {children}
</Authorized>

往上可以看到Authorized组件的由来

import RenderAuthorized from '@/components/Authorized'; // eslint-disable-line
import { getAuthority } from '@/utils/authority';

const Authority = getAuthority();
const Authorized = RenderAuthorized(Authority);

其中getAuthority方法理论上返回当前用户具有的所有权限,可以依照实际需求在src/utils/authority.js文件中对方法改写
所以Authorized是RenderAuthorized方法执行后得到的组件,同时方法参数是Authority,即用户所有权限

RenderAuthorized

来到src/components/Authorized/index.jsx

import Authorized from './Authorized';
import AuthorizedRoute from './AuthorizedRoute';
import Secured from './Secured';
import check from './CheckPermissions';
import renderAuthorize from './renderAuthorize';

Authorized.Secured = Secured;
Authorized.AuthorizedRoute = AuthorizedRoute;
Authorized.check = check;

export default renderAuthorize(Authorized);

可以看到它导出的是renderAuthorize(Authorized)执行后的结果,这个结果理论上也是一个方法,它接收的参数是当前用户所有的权限组合,即getAuthority()得到的数据,最后返回一个组件

renderAuthorize

接着先看renderAuthoriz方法

...
export default Authorized => renderAuthorize(Authorized);

可以看到它导出的是一个方法,所以在index.jsx文件的renderAuthorize(Authorized)返回的最终是renderAuthorize(Authorized)执行得到的结果,往上看

const renderAuthorize = Authorized => currentAuthority => {
  if (currentAuthority) {
    if (typeof currentAuthority === 'function') {
      CURRENT = currentAuthority();
    }

    if (
      Object.prototype.toString.call(currentAuthority) === '[object String]' ||
      Array.isArray(currentAuthority)
    ) {
      CURRENT = currentAuthority;
    }
  } else {
    CURRENT = 'NULL';
  }

  return Authorized;
};

可以看到renderAuthorize(Authorized)执行得到的是一个组件,它接收currentAuthority属性,并且渲染的是外层接收的Authorized参数
由此可以推断这个Authorized参数实际上是一个组件,往上追溯,这个反复提到的Authorized组件是由src\components\Authorized\Authorized.jsx导出

Authorized.jsx

继续看src\components\Authorized\Authorized.jsx

import React from 'react';
import { Result } from 'antd';
import check from './CheckPermissions';

const Authorized = ({
  children,
  authority,
  noMatch = (
    <Result
      status="403"
      title="403"
      subTitle="Sorry, you are not authorized to access this page."
    />
  ),
}) => {
  const childrenRender = typeof children === 'undefined' ? null : children;
  const dom = check(authority, childrenRender, noMatch);
  return <>{dom}</>;
};

export default Authorized;

实际上核心代码是check方法,它返回dom组件,也就是实际的页面组件

CheckPermissions

继续看src\components\Authorized\CheckPermissions.jsx,它的核心代码应该是checkPermissions方法,其中它接收的参数在代码文件也已详细说明

/**
 * 通用权限检查方法
 * Common check permissions method
 * @param { 权限判定 | Permission judgment } authority
 * @param { 你的权限 | Your permission description } currentAuthority
 * @param { 通过的组件 | Passing components } target
 * @param { 未通过的组件 | no pass components } Exception
 */
const checkPermissions = (authority, currentAuthority, target, Exception) => {
  // 没有判定权限.默认查看所有
  // Retirement authority, return target;
  if (!authority) {
    return target;
  } // 数组处理

  if (Array.isArray(authority)) {
    if (Array.isArray(currentAuthority)) {
      if (currentAuthority.some((item) => authority.includes(item))) {
        return target;
      }
    } else if (authority.includes(currentAuthority)) {
      return target;
    }

    return Exception;
  } // string 处理

  if (typeof authority === 'string') {
    if (Array.isArray(currentAuthority)) {
      if (currentAuthority.some((item) => authority === item)) {
        return target;
      }
    } else if (authority === currentAuthority) {
      return target;
    }

    return Exception;
  } // Promise 处理

  if (authority instanceof Promise) {
    return <PromiseRender ok={target} error={Exception} promise={authority} />;
  } // Function 处理

  if (typeof authority === 'function') {
    const bool = authority(currentAuthority); // 函数执行后返回值是 Promise

    if (bool instanceof Promise) {
      return <PromiseRender ok={target} error={Exception} promise={bool} />;
    }

    if (bool) {
      return target;
    }

    return Exception;
  }

  throw new Error('unsupported parameters');
};

这段代码实际上也很好理解,总结来说ant design pro的权限管理模块核心代码就是这个checkPermissions方法,它的作用就是检查路由页面的准入权限和用户所具有的权限是否匹配。如果用户具有访问权限,即返回target参数,即实际的页面组件,否则返回未通过的组件

Understand-Anything:AI驱动的代码知识图谱,实现项目全局洞察与高效导航 在软件开发中,理解复杂代码库的结构和依赖关系是提升开发效率的关键。传统代码阅读方式往往陷入局部视角,难以快速把握系统全貌。知识图谱技术通过将代码实体(如文件、类、函数)及其关系(调用、继承、依赖)可视化,为代码理解提供了全局视角。这项技术的核心价值在于将静态代码转化为动态、可交互的认知地图,极大降低了系统学习与维护成本。在实际工程中,它广泛应用于新成员快速入职、遗留系统梳理、架构影响分析等场景。本文介绍的Understand-Anything工具,正是基于这一理念,通过多智能体分析管道,自动构建代码的结构图 阅读详情

相关推荐

WorkBuddy入门到 多Agent团队协作完全指南(附实操代码与配图)

WorkBuddy的Agent Teams功能支持多智能体协作,通过创建AI团队提升复杂任务处理效率。该功能支持自然语言创建团队、任务分配与依赖管理、成员间消息通信(包括直接消息和广播),并提供任务审批机制。典型应用场景包括软件开发、内容创作等协作任务。环境要求WorkBuddy 2026年3月及以上版本,支持Windows和macOS系统。用户可快速创建包含不同角色的AI团队,通过共享任务列表和信箱系统实现协作。高级功能包括委派模式、任务依赖管理和成员自主认领等,适合各类协作场景。

三棱球的专栏 6457

深入理解Ant Design Pro:实现动态路由与权限管理

在复杂的后台管理系统中,动态路由是实现权限管控的核心能力之一。本文将深入剖析如何结合Umi的运行时配置与权限管理,实现路由的动态加载与菜单控制,首先我是在router里面配置注册了我所有的路由,并创建对应路由的相关页面。然后它主要是通过access来进行权限验证的,给相对应的,比如超管账号添加,那么登录普通账号时就无法查看菜单。然后我们需要找到src路径下的access.ts来进行路由的一个限制修改。这是一个基础页面组件,方便创建页面的时候使用,避免页面没有内容发生报错。这个官方文档里,有详细实现的步骤。

2301_79420857的博客 692

SDM量化噪声等效到PLL输出的传递函数推导

在历年文章或书本中少见SDM量化噪声等效到PLL输出的传递函数推导。需了解SDM量化噪声的本质,配合欧拉方程简化,并将Z域转化成S域。最终结合断环处等效到PLL输出的传递函数,方可完成。

u010486560的博客 1407

Ant Design - Authorized

确切来说,这个是 Ant Design Pro 里面的组件,使用方式很简单,更多的,可以考虑将它进行再封装。先来看一下他在文档里的使用方式。 import RenderAuthorized from 'ant-design-pro/lib/Authorized'; import { Alert } from 'antd'; const Authorized = RenderAuthorized(...

kelly0721的博客 1002

智驾芯片&软件分层&测试

智能驾驶相关的芯片,软件分层,测试相关内容

天赐好车的博客 436

[Dify实战] 项目复盘助手:自动拉数据、生成复盘报告

本文介绍如何利用Dify平台构建自动化项目复盘助手,解决传统人工复盘效率低、易遗漏等问题。系统通过自动拉取Git/Jira等数据源,计算关键指标后,由LLM生成结构化复盘报告。文章详细讲解了数据采集、指标计算、Prompt设计等核心模块的实现,并分享了完整Workflow搭建步骤。实践表明,该系统能将复盘耗时从4小时缩短至10分钟,显著提升数据准确率和执行频率。最后总结了数据一致性、输出质量等常见问题的解决方案,强调Dify+LLM组合可实现复盘流程的自动化流水线。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 118

程序员必备10个Github开源项目,一键生成后台系统

Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费的控制面板呢?我在 Github 上收集了一些优秀的后台控制面板,并总结得出 Top 10。 AdminLTE Github Star 数 24969 , Github 地址:https://github.com/almasaeed2010/AdminLTE。 非常流行的基于 Bootstrap 3.x 的免费的后台 UI 框架。 v.

【优快云】 5038

optee技术简介

OP-TEE(Open Portable Trusted Execution Environment)是一种开源的可信执行环境(TEE),专为ARM TrustZone架构设计。TEE是一种独立的执行环境,运行在主操作系统之外,为敏感任务提供安全的计算空间,如加密、身份验证、密钥管理等。

baron-周贺贺-代码改变世界ctw 1279

umi+react+antdesign pro 实现动态路由和动态菜单(权限管理)

在这可以直接读取,但是有一个问题 当用户改变时,不能即使返回最新的菜单数据。2、但是所需要的数据就很多了,例如当前菜单是否隐藏,侧边栏不显示等等这些属性。按钮权限可以通过每一个页面权限的子集,来获取某些个字段,通过这些字段的鉴别,来对应的显示/隐藏不同的按钮(按钮权限)在这,你可以拿取跳转的当前路由和你获取的动态菜单做匹配,若从在。1、服务器返回的数据尽可能可前端所需要的数据保持一致,且结构一致。3、动态菜单通过对数据操作,可形成动态路由。1、想要做动态路由,可以通过服务器获取动态菜单的数据来做。

gaoxiaofei520sss的博客 7860

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 160

DLMS/COSEM协议的理解体会

DLMS是通信协议,COSEM是电表建模规范。HDLC帧基本格式为0x7e......

一个bug是bug,多个bug能work 8312

AntDesign Pro 根据用户的角色对菜单实现权限管理

此时所有的用户登录展现的菜单效果都是这样的。在src目录下的access.ts进行修改。1.在routes.ts中添加菜单。接下来我们加入角色限制,

weixin_44056269的博客 1504

EtherCAT报文-BRD(广播读)抓包分析

EtherCAT报文之BRD(广播读)报文Wireshark抓包分析。

kevin1499的博客 1212

ant design pro 如何处理权限管理

name 是显示出来给看的,主要是 path action 这两个结合起来,来标明一个唯一的权限。ant design pro 的前端去处理权限好处理的,弄个增删改查。最后才是在所有角色里找到权限来判断,依据的标准是 path action 这两个。刚好这两个我们是能取到的,在请求里取到值,跟用户存的数据库的数据匹配即可。这是个中间件,只要在路由里先用上就行,就是先检查一下是否有权限。主要是后端,如何存权限的信息,要存什么信息,如何验证。然后再判断是否有角色的,角色都没有,肯定没有权限了。

求知久久编程学院 879

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

antdesignpro 权限_ant design pro 权限管理

ant design pro使用权限组件 Authorized来对系统进行权限管理系统的当前权限是保存在localStorage当中的,currentAuthority默认为guest,在不同的页面中,可以通过utils/authority.js中的getAuthority()和setAuthority()方法对权限进行操作。当用户进行login时,请求服务端的数据,会返回一个字段currentA...

weixin_39626181的博客 1403

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

thinkphp6+ant-design-pro-vue搭建基础权限管理后台

tp6+antdv-pro搭建基础权限管理后台(一) 安装thinkphp6 composer create-project topthink/think tp6-antd php think run 或者使用虚拟域名,再浏览器输入域名 若浏览器显示以下页面即成功安装。 安装ant-design-pro-vue git clone --depth=1 https://github.com/vueComponent/ant-design-vue-pro.git antd-vue-pro c

weixin_42558062的博客 2647

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

antd权限管理_Ant Design Pro开发后台管理系统(权限)

前言权限是后台管理系统常见的需求,后台开发必须考虑设计的模块,antd-pro给我们提供了很好的关于权限的封装,我们只需要在配置菜单的时候配置上准入身份,在登录成功以后获取到登陆者身份以后更新登录人身份参数即可。效果:1、没有准入权限的菜单将不显示2、直接在浏览器输入没有准入权限的的地址,将跳转到403页面(图1)图1.直接输入地址但却没有权限个人demo关于权限简介1、用邮箱自己注册账户(注册后...

weixin_27676369的博客 2454

ant design pro v5 动态菜单 权限_大家心心念念的权限管理功能,这次安排上了!...

mall项目的权限管理功能发布啦!权限管理作为后台管理系统的必要功能,mall项目之前的权限管理并不完善。最近我对原先的权限管理进行了重新设计,打造了一套切实可用的权限管理功能。SpringBoot实战电商项目mall(25k+star)地址:https://github.com/macrozheng/mall功能清单菜单管理:可以实现对后台管理系统左侧菜单的管理,支持更换图标、更换名称、控制菜...

weixin_39541227的博客 2064

antd权限管理_Ant Design Pro开发后台管理系统(权限)-阿里云开发者社区

前言权限是后台管理系统常见的需求,后台开发必须考虑设计的模块,antd-pro给我们提供了很好的关于权限的封装,我们只需要在配置菜单的时候配置上准入身份,在登录成功以后获取到登陆者身份以后更新登录人身份参数即可。效果:1、没有准入权限的菜单将不显示2、直接在浏览器输入没有准入权限的的地址,将跳转到403页面(图1)图1.直接输入地址但却没有权限个人demo关于权限简介1、用邮箱自己注册账户(注册后...

weixin_39838798的博客 854

Ant Design Pro:权限管理

接下来只需要在 config/routes.js 路由中为路由项中添加 access 属性, access 属性的值呢, 为在 access 文件返回的对象中的其中一个键名。路由则会在加载时去 access 返回的对象中寻找 这个键名的值,为 true 则当前用户拥有该权限,反之 false 则当前用户无该权限,返回403。接下来可以在 access 文件下的键的值根据当前账户所拥有的权限做一些操作来让这些路由权限的键拥有动态的值。这样一来,就完成了账户的权限判断了。

闪电⚡之王的博客简介 1313

react 权限管理与ant design pro 框架搭建

如果选择了umi@3,还可以选择pro的模板,pro是基础模板,只提供了框架运行的基本内容,complete包含所有区块,不太适合当基础模板来进行二次开发。首先在框架中的登录下拉信息页面,通过接口获取不同权限串,并通过比较进行分类,其中的initialState是设置全局默认state的属性值。对于一个涉及多用户登录的项目,往往会涉及到权限管理以及设计,这篇blog通过antdesginpro框架进行讲解。招到路由页面,对需要设置页面权限的页面进行权限的access即可完成权限的管理。...

一起学习前端知识,一起成为前端开发工程师! 1806

Ant design vue-pro菜单权限管理爬坑

Ant design vue-pro菜单权限管理爬坑 一、从数据库获取角色权限拿到菜单栏permission 二、修改Ant design vue-pro文件根据角色权限自动生成菜单 一 1.获取数据样式 二、 1.修改文件从src下permission.js开始 点击进入src下store->modules->user.js 修改要获取的后台数据的名称 commit(‘SET_ROLES’, role) commit(‘SET_INFO’, result.sysUser) commit(‘

weixin_43991822的博客 2596

ant design pro (十六)advanced 权限管理

一、概述 原文地址:https://pro.ant.design/docs/authority-management-cn 权限控制是中后台系统中常见的需求之一,你可以利用我们提供的权限控制组件,实现一些基本的权限控制功能,脚手架中也包含了几个简单示例以提供参考。 二、详细 2.1、权限组件 Authorized 这是脚手架权限管理的基础,基本思路是通过比对当前权限与准入权限,决定展示正常渲染内容...

weixin_33805992的博客 842

基于Ant Design Pro2 的权限管理实践

前言 在中后台管理项目中,权限是重要的基础功能。在项目架构初期,就要做好全面的设计。 传统的基于url控制的后端权限,在前端spa应用的前提下,已经不再合适。服务端并不能获取到前端的路由跳转。权限这快,前端的逻辑将会更重。基于Ant Design Pro2 ,umi2 的技术栈前提下,antd已经提供的一套相对完善的权限方案。 目标 权限的维度我们希望控制到按钮层,包括菜单,包括路由。 antd方...

weixin_33725515的博客 1389

antdesignpro 权限_ant design pro (十六)advanced 权限管理

一、概述权限控制是中后台系统中常见的需求之一,你可以利用我们提供的权限控制组件,实现一些基本的权限控制功能,脚手架中也包含了几个简单示例以提供参考。二、详细2.1、权限组件 Authorized这是脚手架权限管理的基础,基本思路是通过比对当前权限与准入权限,决定展示正常渲染内容还是异常内容,使用方式详见Authorized 文档。2.2、应用实例通过对数据的组织及权限组件的应用,脚手架实现了基本...

weixin_39703468的博客 329
上一篇: 使用laradock搭建laravel项目
下一篇: React Hooks实现自定义表格列
立青FTK
博客等级 码龄8年 51粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值