ant design 登录权限控制

本文介绍如何使用AntDesign实现登录权限控制。重点在于通过localStorage管理用户的权限标识authority,并在登录及登出时更新此状态。此外,还介绍了如何重定向用户到登录页面。

ant design 登录权限控制

 

在models>>login.ts中 logout 方法 增加 localStorage.removeItem('antd-pro-authority')

当用户退出的时候用调用 login/logout

用户登录时获取 用户的authority 保存在localStorage

authority中 setAuthority 方法

localStorage.setItem('antd-pro-authority', JSON.stringify(proAuthority));

 

logout() {
      const { redirect } = getPageQuery();
      localStorage.removeItem('antd-pro-authority')
      // Note: There may be security issues, please note
      if (window.location.pathname !== '/user/login' && !redirect) {
        history.replace({
          pathname: '/user/login',
          search: stringify({
            redirect: window.location.href,
          }),
        });
      }
    },
  },

### Ant Design Pro 基于角色的权限管理及分权限登录功能 #### 路由与权限配置 在 Ant Design Pro 中,可以通过 `config.js` 文件来定义应用的路由结构以及对应的访问权限。每条路由可以指定其路径 (`path`) 和目标组件 (`component`),并可附加额外的角色或权限字段用于控制访问。 以下是典型的路由配置示例: ```javascript const routes = [ { path: '/admin/dashboard', component: './Admin/Dashboard', authority: ['admin'], // 只允许 admin 角色访问 }, { path: '/user/profile', component: './User/Profile', authority: ['user', 'guest'], // user 或 guest 都能访问 } ]; ``` 上述代码中,`authority` 字段指定了该路由所需的最低权限级别[^3]。 --- #### 动态权限校验逻辑 Ant Design Pro 提供了一个内置工具函数 `checkPermissions`,它负责验证当前用户的权限是否满足特定路由的要求。此方法的核心在于对比用户拥有的权限列表与目标路由所需权限之间的关系: - 如果两者匹配,则加载对应的目标页面; - 否则跳转到无权访问提示页或其他默认页面。 具体实现如下所示: ```typescript function checkPermissions(currentAuthority, requiredAuthorities): React.ReactNode | null { const hasPermission = requiredAuthorities.some((role) => currentAuthority.includes(role)); if (hasPermission) { return <Outlet />; // 加载子路由内容 } else { return <NoAccessPage />; // 显示无权访问界面 } } ``` 当用户尝试进入某一路由时,框架会自动调用此类方法完成初步筛选工作[^2]。 --- #### 用户表单与多角色支持 对于涉及复杂业务场景的应用程序而言,在创建或者编辑某些资源的时候可能需要考虑不同身份下的差异化展示需求。此时可以在前端构建阶段预先设定好各种类型的输入控件及其关联属性,并依据实际登陆者的信息动态调整可见范围。 例如下面的例子展示了如何根据不同角色显示不同的选项卡组: ```jsx import { Tabs } from 'antd'; const RoleBasedTabs = ({ role }) => ( <> {['admin'].includes(role) && ( <Tabs> {/* Admin-specific tabs */} </Tabs> )} {['editor', 'viewer'].some(r => r === role) && ( <Tabs> {/* Editor or Viewer specific tabs */} </Tabs> )} </> ); ``` 这样做的好处是可以让整个系统的交互更加灵活可控的同时保持较高的安全性标准. --- #### Tree 组件作为权限选择器 为了简化管理员分配细粒度操作许可的过程,我们可以利用 Antd 的 Tree 控件制作可视化的勾选框集合。每一个节点代表一种能力单元(比如增删改查),而整棵树则涵盖了某个领域内的全部可用动作组合。 这里给出一段简单的初始化数据片段: ```json [ { title: "Users Management", key: "users_mgmt", children: [ { title: "Create User", key: "create_user" }, { title: "Delete User", key: "delete_user" } ] }, ... ] ``` 之后再结合受控模式绑定至状态变量即可轻松达成双向同步效果[^1]: ```tsx <Tree checkable={true} defaultExpandAll={false} onCheck={(checkedKeys) => setCheckedPermissions(checkedKeys)} /> ``` --- #### Access.ts 多角色权限控制机制 最后值得一提的是关于 multi-role handling 方面的内容。通常我们会借助中间层拦截请求的方式来判断当前主体是否具备执行特定行为的权利。而在 ADP(v6+)项目里我们往往倾向于采用声明式的写法——也就是提前准备好一系列规则映射表(access control list),然后交由专门的服务类去解析执行. 简单来讲就是先定义好所有的可能性情况然后再逐一排查直至找到符合条件为止: ```ts // src/access.ts export function canReadReports(userRoles:string[]):boolean{ return userRoles.find(r=>r==='report-reader') !== undefined; } // somewhere in your app codebase... if(canReadReports(currentUser.roles)){ renderReportPreview(); }else{ showErrorMessage('Insufficient Privileges'); } ``` 通过这种方式不仅可以让我们的源码显得更为清晰易懂而且还能有效减少重复劳动量从而提升整体开发效率[^4]. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值