antd pro(V5) 按钮权限

antd-pro的权限跟我们用的不太一样,所以需要自己开发一套。

主要思路如下:
1.登录的时候获取所有的按钮并存到本地
2.进入页面的时候根据code判断是否显示按钮(组件形式,props.children)
3.特殊的(比如disabled)提供一个方法判断有无权限

1.登录页

let permissions = res.roleList[0].permissions;
sessionStorage.setItem('btnInfo', JSON.stringify(getBtns(permissions)));

2.页面中使用

import { HasPm, hasPm } from '../../../../ytCommon/utils/app';

<!-- 组件形式  --> 
<!-- 一般用于是否显示按钮 -->
<HasPm  key="add"   permissionCode="admin_district_auth:add">
    <a>
        新增
    </a>
</HasPm>,

<!-- 方法形式 -->
<!-- 一般用于特定的状态 -->
<Switch
    disabled={!hasPm('admin_district_auth:modify')}
    checked={e === '1' ? true : false}
    onChange={() => onChangeSwitch(row)}
/>

3.其他的方法(getBtns,HasPm, hasPm)

//登录获取所有的按钮
export function getBtns(permissions: API.Permission[]) {
  let arr: API.Permission[] = [];
  function forEach(permissions: API.Permission[]) {
    permissions.forEach((item: API.Permission) => {
      if (item.childPermissionList.length > 0) {
        forEach(item.childPermissionList);
      } else {
        arr = arr.concat(item);
      }
    });
  }
  forEach(permissions);
  return arr;
}



// 判断有无按钮权限(组件形式)
let btnInfo: API.BtnInfo[] = [];
export const HasPm = (props: { permissionCode: string; children: any }) => {
  const { permissionCode, children } = props;

  // 先获取按钮列表
  if (btnInfo.length === 0) {
    btnInfo = JSON.parse(sessionStorage.getItem("btnInfo") || "[]");
  }

  // 判断有无权限
  const t = btnInfo.some((item: API.BtnInfo) => {
    if (item.permissionCode === permissionCode) {
      return true;
    } else {
      return false;
    }
  });
  if (t) {
    return children;
  } else {
    return null;
  }
};



// 只返回是否有权限(方法形式)
export const hasPm = (permissionCode: string) => {
  // 先获取按钮列表
  if (btnInfo.length === 0) {
    btnInfo = JSON.parse(sessionStorage.getItem("btnInfo") || "[]");
  }

  // 判断有无权限
  const t = btnInfo.some((item: API.BtnInfo) => {
    if (item.permissionCode === permissionCode) {
      return true;
    } else {
      return false;
    }
  });

  return t;
};

这样就可以实现一套自己的按钮权限系统,接下来就是要解决配置多个paths的问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值