Maison  >  Article  >  interface Web  >  Comment implémenter le contrôle des autorisations de menu en réaction ?

Comment implémenter le contrôle des autorisations de menu en réaction ?

小云云
小云云original
2018-05-18 11:09:014460parcourir

Cet article présente principalement la méthode d'implémentation du contrôle des autorisations de menu dans React. L'éditeur pense que c'est plutôt bon. Maintenant, je le partage avec vous et vous donne une référence, j'espère qu'il pourra vous aider.

Habituellement, le système de gestion backend de l'entreprise nécessite un contrôle des autorisations, c'est-à-dire que les utilisateurs avec des rôles différents voient différents menus, comme indiqué ci-dessous :

Ci-dessous, via React Pour mettre en œuvre un tel système de gestion backend (échafaudage), introduction de la fonction :

1. Les éléments de menu en haut sont générés dynamiquement en fonction du rôle de l'utilisateur.

2. Les éléments du menu de test latéral sont générés dynamiquement en fonction du menu supérieur sélectionné.

Accédez directement au code :

Configuration du routage :

export default (
  <Route path="/" component={App}>
    <IndexRoute component={EmployeeList}/>
    <Route path="/employee" component={Employee}>
      <IndexRoute component={EmployeeList}/>
      <Route path="/employee/list" component={EmployeeList}/>
      <Route path="/employee/detail/:id" component={EmployeeDetail}/>
    </Route>
    <Route path="/goods" component={Goods}>
      <IndexRoute component={GoodsList}/>
      <Route path="/goods/list" component={GoodsList}/>
      <Route path="/goods/detail/:id" component={GoodsDetail}/>
    </Route>
  </Route>
)

L'élément de menu supérieur devient un composant distinct :

// 动态数据
import React, { Component } from &#39;react&#39;
import { Link } from &#39;react-router&#39; // 引入Link处理导航跳转
import { connect } from &#39;react-redux&#39;
import { fetchPostsIfNeeded, updateSubMenuWhenClick } from &#39;../actions/count&#39;
import { Menu } from &#39;antd&#39;;
class TopMenu extends Component {
  constructor(props){
    super(props);
    this.handleMenuClick = this.handleMenuClick.bind(this);
  }

  handleMenuClick(e){
    // console.log(e.item.props[&#39;data-menukey&#39;]);
    const { updateSubMenuWhenClick } = this.props
    updateSubMenuWhenClick(true, e.item.props[&#39;data-menukey&#39;])
  }
  componentWillMount() {
  }
  componentDidMount() {
    const { fetchPostsIfNeeded } = this.props
    fetchPostsIfNeeded()
  }
  render() {
    const { menuList, fetchPostsIfNeeded } = this.props
    if(menuList.length != 0) {
      fetchPostsIfNeeded(true, menuList[0].key)
    }

    return (
      <Menu
        theme="dark"
        mode="horizontal"
        defaultSelectedKeys={[&#39;0&#39;]}
        style={{ lineHeight: &#39;64px&#39; }}
        onClick={this.handleMenuClick}
      >
      {
        menuList.map((e, index) => 
          <Menu.Item key={index} data-menukey={e.key} >
            <Link to={{ pathname: e.url }} >{e.name}</Link>
          </Menu.Item>
        )
      }
      </Menu>
    )
  }
}

const getList = state => {
  return {
    menuList: state.update.menuList
  }
}

export default connect(
  getList, 
  { fetchPostsIfNeeded, updateSubMenuWhenClick }
)(TopMenu)

Dans la fonction de rendu, si la longueur des données du menu supérieur générées dynamiquement n'est pas 0, les éléments du menu latéral sont générés dynamiquement en fonction de la clé du menu supérieur.

const { menuList, fetchPostsIfNeeded } = this.props
    if(menuList.length != 0) {
      fetchPostsIfNeeded(true, menuList[0].key)
    }

Recommandations associées :

Quelles sont les façons d'écrire des composants dans React

Quelles sont les fonctions de cycle de vie de React composants

Connaissance du système d'événements React

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn