ant design pro(v4) 我经常在用,用得还挺舒服的,权限管理、路由设置啥的都挺好用。
但是有时候有些页面咱们并不需要登录才允许查看,比如一些公共数据查询。
但是好像一直搜索不到如何绕开这个权限管控,今天研究出来了简单记录一下。
其实这个也是很简答,只是太依赖这个脚手架了,很多基础代码没有去看。
其实这个重定向就在最源头的app文件里面。
// src/app.jsx
onPageChange: () => {
const { location } = history; // 如果没有登录,重定向到 login
if (!initialState?.currentUser && location.pathname !== loginPath) {
history.push(loginPath);
}
},
解决办法很简单,判断一下路径,不需要权限的路径就直接不要重定向就行了。
// src/app.jsx
const needLoginPath = [
'/manage_admin/user_manage',
'/manage_admin/login_manage',
];
onPageChange: () => {
const { location } = history; // 如果没有登录,重定向到 login
if (!initialState?.currentUser && location.pathname !== loginPath && needLoginPath.indexOf(location.pathname) > -1) {
history.push(loginPath);
}
},
PS:routes的权限问题
在绕过权限后出现了一个问题,就是有些网页我设置是只有管理员权限才能看到的,设置为:
这么设置后出现一个问题,当我登录一个非管理员用户的时候,我确实看不到这些路径。
但是我没登录时反而可以看到这几个路径。
问题出在access的判定中。
可以看到第一行,原本的管理员权限判定使用的是currentUser,当你登录了非管理员时,返回的是false。当你没登录时返回的是undefined。antdpro的权限管理没有处理undefined,所以没登录时会看到这些路径。
如下图,没有明确判断canUser!==undefined
的时候,输出了undefined。
解决方法就是明确判断currentUser !== undefined
,让权限正确的输出布尔型。