@umijs/plugin-access-layout
v1.2.0
Published
@umijs/plugin-access-layout
Downloads
8
Maintainers
Keywords
Readme
@umijs/plugin-access-layout
使用
使用 npm:
$ npm install --save-dev @umijs/plugin-access-layout
或者使用 yarn:
$ yarn add @umijs/plugin-access-layout --dev
说明
这个插件将 plugin-access 和 plugin-layout 插件的功能整合在一起,为了支持 Umi 的约定式用法,还有更多的动态设置方案。
特性
1、支持约定式和配置式 2、动态修改权限 3、动态使用菜单 4、支持运行时配置 Pro-Layout 5、支持页面级别配置 Pro-Layout 6、支持页面级权限 7、支持页面级修改权限 8、支持不使用 Pro-layout 9、兼容 Pro 旧项目的写法
搭配其他插件
1、配套 plugin-locale 使用,会默认开始国际化的菜单 2、配合 plugin-model 使用,可以使用 useModel('@@accessLayout') 3、配合 plugin-initial-state 使用,可以不指定权限判断数据
Config 配置
accessLayout: {
iconNames: ['smile'], // 约定式用法,需要将所有用到的 icon 名称写全,为了按需加载
useModel: true, // 声明是否搭配了 plugin-model 使用
}
运行时配置
export const accessLayout = {
title: 'Runtime Demo',
// Pro-Layout 支持的所有配置
};
页面级配置
useEffect(() => {
setLayoutConfig({
title: 'PageSetDemo',
// Pro-Layout 支持的所有配置
});
}, []);
页面级别权限控制
import { useModel } from 'umi';
const { access } = useModel('@@accessLayout');
if (access.canAdmin) {
// canAdmin 在src/access 中定义
// 或者使用 setAccess 设置
console.log('access.canAdmin');
}
页面级修改权限
import { useModel } from 'umi';
const IndexPage: FC<PageProps> = ({ index, dispatch }) => {
const { setAccess } = useModel('@@accessLayout');
return (
<div
className={styles.center}
onClick={() => setAccess({ canAdmin: false })}
>
点击操作权限
</div>
);
};
扩展菜单配置
可以指定部分页面不使用 layout
const menuData = [
{
path: '/login',
hideLayout: true,
},
];
支持约定式路由用法
// src/layouts/index
import { AccessLayout } from 'umi';
const BasicLayout = props => {
// 这个数据可以是任意来源的,你可以在登录之后再去获取菜单数据
const serveMenuData = [
{
path: '/',
name: 'index',
icon: 'smile',
},
{
path: '/ListTableList',
name: 'list',
icon: 'heart',
access: 'canAdmin',
},
{
path: '/login',
hideLayout: true,
},
];
// 这个数据会传递给 src/access.ts
// 搭配 plugin-initial-state 使用的话,这个可以不传
const initState = {
currentUser: {
access: 'admin',
},
};
return (
<AccessLayout
initState={initState}
menuData={serveMenuData}
{...props}
></AccessLayout>
);
};
export default BasicLayout;