react权限管理

react 高阶组件实现按钮权限显示与隐藏实现

2020-02-27  本文已影响0人  小小小小的人头
image.png

一些管理端通过不同权限对按钮进行控制与隐藏,这个功能很普遍吧。自己记录一下自己在react端的实现方式-主要使用高阶组件方式;

代码如下:
import React from 'react';
import PropTypes from 'prop-types'

/**
 * 校验当前用户是否有功能编码对应的权限
 * @param {string} functionName
 */
export function checkAuth(functionName, menuId) {
  if (functionName) {
    let functionsList; //[{menuId:0,btnCode:"add"},{menuId:2,btnCode:"del"}]
    if (sessionStorage.getItem('permissionsButtonList')) {
      functionsList = JSON.parse(sessionStorage.getItem('permissionsButtonList');)
    } else {
      return false;
    }
    //这边有一个菜单ID-主要是为了兼容复用同一个组件情况
    if (menuId) {
      functionsList = functionsList.filter((item) => {
        return item.menuId == menuId
      })
    }
  
    const functions = functionName.split(',');
    const flag = functions.some((value) =>
      functionsList.some((func) => func.buttonCode == value.trim())
    );
    return flag;
  } else {
    return false;
  }
}


/**
 * 权限组件封装
 */
export class AuthWrapper extends React.Component {
  render() {
    return checkAuth(this.props.functionName, this.props.menuId) && this.props.children;
  }
}

AuthWrapper.propTypes = {
  functionName: PropTypes.string,
  menuId: PropTypes.string,
}

使用方式:

  <AuthWrapper functionName='权限按钮唯一标识'>
      <Button>添加</Button>
  </AuthWrapper>

TIPS: 这个写的是前端的的实现思路 可能后台数据返回各不相同-思想仅供参考(为了小白能看明白 写一下)

//数据结构大致这样
[{menuId:0,btnCode:"0_add"},{menuId:0,btnCode:"0_del"},{menuId:0,btnCode:"0_edit"},{menuId:1,btnCode:"1_add"}]

当然咯 这是我们这边返回的数据接口是这样的。每个按钮也有唯一的BtnCode

  <AuthWrapper functionName='权限按钮唯一标识' menuId="唯一菜单ID">
      <Button>添加</Button>
  </AuthWrapper>

这样可以做到通用组件,不同页面的权限控制

控制前端按钮的显示隐藏就可以实现了。当然完全的权限按钮 还需要后台小伙伴的配合。 此文仅供参考。希望可以帮助到有需要的小伙伴们~

上一篇下一篇

猜你喜欢

热点阅读