不同角色路由权限配置(六)

news2024/12/23 11:57:00

一、启用方式

配置开启config/config.ts。同时需要 src/access.ts 提供权限配置

export default {
  access: {},
  // access 插件依赖 initial State 所以需要同时开启
  initialState: {},
};

这里以扩展的路由配置为例,配置只有admin权限才能查看的页面

1、在src/access.ts文件定义权限
export default function access(initialState: { currentUser?: API.CurrentUser } | undefined) {
  const { currentUser } = initialState ?? {};
  return {
    canAdmin: currentUser && currentUser.username === 'admin',
  };
}

这里判断登录名是否是admin

2、config/routes.ts添加路由配置access: ‘canAdmin’
{
    path: '/func',
    name: 'func',
    icon: 'crown',
    access: 'canAdmin',
    routes: [
      {
        path: '/func',
        redirect: '/func/funcManage',
      },
      {
        path: '/func/funcManage',
        name: 'funcManage',
        component: './funcManage',
      },
    ],
  }

在这里插入图片描述
在这里插入图片描述
这样功能管理模块就只能admin账号才能看到

3、react hook useAccess获取权限相关信息
import React from 'react';
import { useAccess } from 'umi';

const PageA = (props) => {
  const { foo } = props;
  const access = useAccess();

  if (access.canReadFoo) {
    // 如果可以读取 Foo,则...
  }

  return <>TODO</>;
};

export default PageA;

配合 Access 组件可以很简单的实现页面内的元素的权限控制。

4、Access组件
accessible

Type: boolean
是否有权限,通常通过 useAccess 获取后传入进来。

fallback

Type: React.ReactNode
无权限时的显示,默认无权限不显示任何内容。

children

Type: React.ReactNode
有权限时的显示。

import React from 'react';
import { useAccess, Access } from 'umi';

const PageA = (props) => {
  const { foo } = props;
  const access = useAccess(); // access 的成员: canReadFoo, canUpdateFoo, canDeleteFoo

  if (access.canReadFoo) {
    // 如果可以读取 Foo,则...
  }

  return (
    <div>
      <Access
        accessible={access.canReadFoo}
        fallback={<div>Can not read foo content.</div>}
      >
        Foo content.
      </Access>
      <Access
        accessible={access.canUpdateFoo}
        fallback={<div>Can not update foo.</div>}
      >
        Update foo.
      </Access>
      <Access
        accessible={access.canDeleteFoo(foo)}
        fallback={<div>Can not delete foo.</div>}
      >
        Delete foo.
      </Access>
    </div>
  );
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新华三H3CNE网络工程师认证—路由基础

我们的一个个网络其实是由不同的广播域构成的&#xff0c;而路由器的作用就是用来连接不同的广播域。那么不同广播域之间是如何通信的呢&#xff1f;比如有三个网段&#xff0c;1.0、2.0和3.0。网段1.0和网段2.0通信需要构造数据包&#xff0c;源是1.1&#xff0c;目标去往2.1。…

3.6 上下文菜单

上下文菜单 上下文菜单就是常见的右键菜单(弹出式菜单)。 显示上下文菜单&#xff0c;阻塞函数 BOOL TrackPopupMenu(HMENU hMenu, //菜单句柄UINT uFlags, //显示方式int x, //水平位置&#xff0c;屏幕坐标系int y, //垂直位置&#xff0c;屏幕坐标系UINT nReserved, //…

Cartopy简介和安装

Cartopy 是一个开源免费的第三方 Python 扩展包&#xff0c;由英国气象办公室的科学家们开发&#xff0c;支持 Python 2.7 和 Python 3&#xff0c;致力于使用最简单直观的方式生成地图&#xff0c;并提供对 matplotlib 友好的协作接口。初学Cartopy&#xff0c;欢迎指正&#…

Leetcode—186. 反转字符串中的单词 II【中等】Plus

2024每日刷题&#xff08;152&#xff09; Leetcode—186. 反转字符串中的单词 II 实现代码 class Solution { public:void reverseW(vector<char>& s, int n) {int i 0;int j 0;while(i < n) {while(i < j || i < n && s[i] ) {i;}while(j &…

Spring自动装配的局限

Spring自动装配的局限 1. 覆盖风险2. 类型限制3. 精确性挑战4. 维护难度 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Spring的自动装配功能虽然为开发者带来了极大的便利&#xff0c;但在实际应用中也存在一些不容忽视的局限。 1. 覆盖…

大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

科普小课堂|LCD 问题排查思路解析

&#xff08;ELF 1开发板、ELF 1S开发板及显示屏&#xff09; 在嵌入式系统开发中&#xff0c;液晶显示器&#xff08;LCD&#xff09;作为人机交互的重要界面&#xff0c;其稳定性和可靠性至关重要。然而在实际应用中&#xff0c;LCD难免会遇到各种问题。今天和各位小伙伴分享…

Javascript常见算法(二)【学习】

动态规划 斐波那契数列&#xff1a; 经典的动态规划问题&#xff0c;每个数是前两个数的和。 斐波那契数列&#xff08;Fibonacci sequence&#xff09;是一个非常著名的数列&#xff0c;其中每个数是前两个数的和&#xff0c;序列以0和1开始。在JavaScript中&#xff0c;有多…

【数据结构】顺序表详解以及实现(C语言实现)

目录 前言&#xff1a; 顺序表的特点&#xff1a; 顺序表简介&#xff1a; 顺序表具体实现&#xff1a; 1.初始化 2.销毁 3.检查空间容量 4.头插和尾插 5.头删和尾删 6.打印 7.指定位置插入 8.指定位置删除 9. 查找是否有对应元素 顺序表是线性表的存储结构&#xff…

8月5日笔记

8月5日 nmap命令使用 nmap四种基本功能&#xff1a;端口扫描、主机探测、服务识别、系统识别。 nmap ip默认情况下&#xff0c;nmap 会对目标执行 TCP 端口扫描&#xff0c;尝试找出哪些端口是开放的&#xff0c;并提供关于这些端口上运行的服务的一些基本信息。 其他参数&…

Html5总结

前端学习 html决定页面的结构css决定页面的样式js决定页面的行为 Html5 1.文本格式化标签&#xff08;熟记&#xff09; 你在网页中&#xff0c;有时需要为文字设置粗体、斜体或下划线效果&#xff0c;这时就需要用到HTML中的文本格式化标记 2.标签属性 例如&#xff1a; …

Java SDK开发(SpringBoot Starter)

SDK开发 开发starter的好处&#xff1a;引入starter之后&#xff0c;可以在配置文件中配置&#xff0c;自动生成客户端使用。 步骤 1. 创建一个初始化SpringBoot项目&#xff0c;选择相关依赖&#xff1a; Lombook&#xff1a;日志注解 第二个注解是为了关键词提示用的&…

Java:多线程(同步死锁,锁原子变量,线程通信,线程池)

5&#xff0c;同步和死锁 5.1&#xff0c;Synchronized&#xff0c;Lock 修饰一个代码块&#xff0c;被修饰的代码块称为同步语句块&#xff0c;其作用的范围是大括号{}括起来的代码&#xff0c;作用的对象是调用这个代码块的对象&#xff1b;修饰一个方法&#xff0c;被修饰的…

如何使用极狐GitLab 实现最小权限访问?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

初始化seata在nacos的配置报错nacos-config.sh 127.0.0.1-nacos-config.txt-文件不存在

问题&#xff1a;初始化seata在nacos的配置报错nacos-config.sh 127.0.0.1-nacos-config.txt-文件不存在 解决思路&#xff1a; 1.seata-server-0.9.0\seata\conf下的file.conf文件要修改&#xff1a; transport {# tcp udt unix-domain-sockettype "TCP"#NIO NA…

IDEA如何去掉编辑框右侧的竖线

打开 IntelliJ Idea 软件 依次找到 File—>Settings—>Editor—>General—>Appearance 去掉勾选 Show hard wrap and visual guides (configured in Code Style options)

OpenAI 取消为 ChatGPT 加水印计划,用户反应成关键因素|TodayAI

OpenAI 近日宣布&#xff0c;尽管公司内部已经准备了一种为 ChatGPT 生成的文本添加水印的系统&#xff0c;但由于担心用户反应&#xff0c;公司决定暂不推出这一功能。 据《华尔街日报》报道&#xff0c;OpenAI 早在一年前就开发了一个可以为 ChatGPT 生成的文本添加水印的系…

智能化招聘系统:从筛选到录用的全程解析

一、引言 在数字化时代&#xff0c;企业的人力资源管理正经历着前所未有的变革。招聘作为人力资源管理的重要一环&#xff0c;其效率与精准度直接影响着企业的竞争力和发展动力。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;智能化招聘系统应运而生&…

开源SFTP服务器软件SFTPGo

什么是 SFTPGo&#xff1f; SFTPGo 是一种事件驱动的文件传输解决方案。它支持多种协议&#xff08;SFTP、SCP、FTP/S、WebDAV、HTTP/S&#xff09;和多种存储后端&#xff0c;包括本地文件系统、加密本地文件系统、S3&#xff08;兼容&#xff09;对象存储、Google Cloud Stor…

【Linux】—— Linux进程状态(R、S、D、T、Z、X)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;Linux跬步积累 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日一题 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0…