---
group:
    title: 项目开发规范
title: 6.权限判断
---
# 权限判断使用说明

## 菜单权限

通过路由配置`access`，然后在`src/access.tsx`里面做业务处理。

``` 
/**
 * @see https://umijs.org/zh-CN/plugins/plugin-access
 * */
 
import defaultSettings from '../config/defaultSettings';
export default function access(initialState: { currentUser?: API.CurrentUser } | undefined) {
  const { currentUser } = initialState ?? {};
  const matchAllowMenus = currentUser?.authorizedMenus || []
  return {
    canAdmin: true, //  currentUser && currentUser.access === 'admin',
    canDemo: true, // process.env.NODE_ENV === 'development',
    canReadList: false,
    // 判断是否有权限
    passAuthority: (route: any)=> {
      // return process.env.MOCK != 'none'
      if (!defaultSettings.checkAuthority) {
        return true
      }
      // 原来的route.name判断替换成了route.menuCode
      const matchMenu = matchAllowMenus.filter(mItem => mItem.menuCode === route.menuCode)
      return matchMenu.length > 0 // || route.file === '@/pages/404.tsx'
    }
  };
}

```

## 功能权限

*（主要针对按钮或者其他结构）

### 通用组件

如表格、筛选相关的按钮组，对应的权限将统一使用`codes`与 `permissionCodes`与其配置的按钮`code`进行判断，已经统一在 `src/layout`内配置，无需要单独配置

### 单独配置权限

使用方法方法`checkFuncPermissionByCodes(permission, btnCode)`（返回值`false`代表有权限,  `true`代表无权限）

其中 `funcPermissionCodes`参数来源于通用namespace为'common'的model内部state值，或者上下文文件`@/components/LayoutContext`


```
  import React from 'react'
  import { Button } from 'antd'
  import { refreshFetching, checkFuncPermissionByCodes, requestDictCodes } from '@/utils/utils';
  import LayoutContent from '@/components/LayoutContext';
  const PermissionDemo = ()=> {
    const { dictionaryParams, funcPermissionCodes, btnFuncCodes, commonUse } = useContext(LayoutContent);
  
    retrun <div> {!checkFuncPermissionByCodes(funcPermissionCodes, 'codeBtnUpdate') ?
                <Button type="primary">这个按钮是否有权限显示</Button>
                : null}
  <div>
  }
  
  export default PermissionDemo
  
 
```
