Ant Design Pro 使用Authorized组件做权限验证

本文介绍了如何在Ant Design Pro项目中利用Authorized组件进行权限控制,通过具体的代码示例展示如何实现不同角色的页面访问权限验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ant Design Pro做为阿里旗下的开源前端框架其优秀和优势就不用赘述了。
请看下图

今天我们要讲的是如何在ant design pro中做权限验证。

先上代码:

import RenderAuthorized from '../components/Authorized';

const user=getUser();
const Authorized = RenderAuthorized(user.role);
const noMatch = <Alert message="No permission." type="error" showIcon />;


const havePermission = () => {
  return false;
};

const havePermissionAsync = new Promise((resolve,reject)=>{
  // Call reslove on behalf of passed
  setTimeout(()=>reslove(),1000)
});

ReactDOM.render(
  <div>
    <Authorized authority="admin" noMatch={noMatch}>
      <Alert message="user Passed!" type="success" showIcon />
    </Authorized>
    <Authorized authority={['user','admin']} noMatch={noMatch}>
      <Alert message="Use Array as a parameter passed!" type="success" 
### Ant Design Pro 中实现未登录状态下页面显示的方法 在 Ant Design Pro 应用中,为了处理未登录状态下的页面显示逻辑,通常会结合路由守卫和权限控制来确保用户体验的一致性和安全性。具体来说: #### 路由配置与保护 通过自定义 `authority` 属性以及利用 `AuthorizedRoute` 组件可以有效地拦截未经验证的访问请求,并将其重定向至登录页。 ```jsx import React from 'react'; import { Route, Redirect } from 'dva/router'; import Authorized from './utils/Authorized'; const { check } = Authorized; // 定义受保护的路由组件 function Authority(props) { const { component: Component, authority, ...restProps } = props; return ( <Route {...restProps} render={(routeProps) => check(authority, routeProps.location.pathname) ? ( <Component {...routeProps} /> ) : ( <Redirect to={{ pathname: '/user/login', state: { from: routeProps.location } }} /> ) } /> ); } export default Authority; ``` 此代码段展示了如何创建一个名为 `Authority` 的高阶组件用于包裹其他业务组件并实施鉴权操作[^1]。 #### 用户认证状态管理 借助于 dva 或者 react-redux 这样的状态管理库,可以在全局范围内跟踪用户的登录情况。每当应用程序启动时,都会尝试从本地存储或其他持久化机制恢复用户信息,并据此更新应用的状态树。 一旦检测到用户尚未完成身份验证,则应阻止其进入任何敏感区域直至成功登陆为止。 ```javascript // src/models/user.js effects: { *fetchCurrent(_, { call, put }) { try { const response = yield call(queryCurrentUser); if (response && !response.code) { yield put({ type: 'saveUserInfo', payload: response.data, }); // 如果有缓存的跳转地址则返回原处 const redirectUrl = sessionStorage.getItem('redirect_url'); if (redirectUrl) { window.history.replaceState(null, '', redirectUrl); sessionStorage.removeItem('redirect_url'); } } else { // 清除可能存在的过期 token 并强制登出 localStorage.clear(); sessionStorage.clear(); throw new Error('Failed to fetch current user info.'); } } catch (error) { console.error(error); yield put(routerRedux.push('/user/login')); } }, }, ``` 上述模型片段说明了当获取当前用户失败时,系统将会清除所有 session 数据并将用户导向至 `/user/login` 页面进行重新登录[^2]。 #### 加载指示器的应用 考虑到网络延迟等因素可能导致初次加载时间较长的情况,在确认最终登录状况前可先展示进度条或 spinner 来提示正在努力工作之中。 ```jsx import React, { useState, useEffect } from 'react'; import Spin from 'antd/es/spin'; import styles from './index.less'; const BasicLayout = ({ children }) => { const [initialized, setInitialized] = useState(false); useEffect(() => { async function init() { await dispatch({ type: 'user/fetchCurrent' }); setInitialized(true); } init(); }, []); return initialized ? ( <div className={styles.container}>{children}</div> ) : ( <Spin size="large" tip="Loading..." style={{ marginTop: 200 }}> <div className={styles.content}></div> </Spin> ); }; export default BasicLayout; ``` 这段布局组件会在初始化过程中展现旋转动画直到确定好用户的登录状态再切换成实际的内容视图[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值