ant-design / ant-design-pro

👨🏻‍💻👩🏻‍💻 Use Ant Design like a Pro!
https://pro.ant.design
MIT License
36.28k stars 8.14k forks source link

🐛 [BUG] 使用antdpro +umi4 菜单及权限问题 #10103

Closed 2430677100 closed 1 year ago

2430677100 commented 2 years ago

🐛 bug 描述

需求说明: 想实现动态菜单及其权限控制,

实现思路:

1.通过服务器获取到登录用户的路由信息,并将其存入全局中initialState 2.在access.ts权限约定文件中,拿到存入全局的路由数据,将其与当前路由信息进行判断,判断方法为(includes),并返回true和false 3.给需要权限校验的路由项都添加access中返回的jkey值

现在问题:

当我登录用户1,渲染出的菜单,权限一切正常,当我登录用户2,渲染出的菜单为用户1的菜单信息,权限正常,也就是说我点应该属于用户1的菜单,页面会渲染403页面,当刷新页面,菜单信息成功返回用户2应该展示的菜单

🏞 期望结果 | Expected results

应该登录进去,路由权限与渲染菜单保持一致

💻 复现代码 | Recurrence code

经过本人不断重测发现,不是我项目逻辑的问题,通过

pro create myDemo

创建出新的脚手架也存在, 复现很简单,

  1. 启动项目后 通过admin 登录,一切正常,退出登录
  2. 通过user 登录,退出登录
  3. 再登录admin,此刻menu渲染的还是user的菜单目录,刷新页面,则恢复正常

© 版本信息

🚑 其他信息

本人仅是枚两年经验的小前端,如有考虑不全,望大家指导批评

2430677100 commented 2 years ago

还有一个小问题,刚创建的脚手架,侧边栏收缩再放开,会闪烁

joesdu commented 2 years ago

你路由上的access应该是忘记配置了.

2430677100 commented 2 years ago

你路由上的access应该是忘记配置了.

大佬配置了的,而且新建的脚手架默认也存在这个问题

joesdu commented 2 years ago

你路由上的access应该是忘记配置了.

大佬配置了的,而且新建的脚手架默认也存在这个问题

此时应该可以艾特 @chenshuai2144 大佬瞅瞅.

nhdeng commented 2 years ago

我遇到了类似的问题,access配置权限以后, layout 菜单并没有被移除

pangxzi commented 2 years ago

我也遇到了类似的问题,access配置权限以后,页面会渲染403页面,但是layout 菜单并没有被移除

2430677100 commented 2 years ago

我也遇到了类似的问题,access配置权限以后,页面会渲染403页面,但是layout 菜单并没有被移除 反正我放弃umi4了,用umi3稳定的一批

kaoding commented 2 years ago

@chenshuai2144 这个问题很多都碰到了。

chenshuai2144 commented 2 years ago

搞个demo出来我看看

2430677100 commented 2 years ago

脚手架创建出来, user admin 两个账号来回切换,这个问题就出来了

phoema commented 1 year ago

@chenshuai2144 您好,请问这个问题是在这里修改并跟踪吗? 我跟踪了ant pro、Prolayout和umi4,都在提这个问题。 但是只有这边没有关闭。

drizzlesconsin commented 1 year ago

repo umirc.ts repo access.ts

没回应,不知道是不是没复现。

终于找到 100% 必现步骤: 访问根路由 [browser history] http://localhost:port/

hb1707 commented 1 year ago

@chenshuai2144 目前我这边复现发现这个问题可能和setInitialState有关,登录时候的setInitialState操作并未影响到菜单状态,如果不在菜单渲染完之后执行一次setInitialState,access.ts里面access()方法就不会刷新,也就无法隐藏无权限的菜单项。反之,如果在请求登录接口之后,菜单已经渲染完成,再有超过一次的setInitialState,那么可能无法复现这个bug。

hb1707 commented 1 year ago

问题解决线索来自这句代码: src.umi-production\plugin-access: const access = React.useMemo(() => accessFactory(initialState), [initialState]);

chb584890926 commented 1 year ago

请问你这边解决了吗

phoema commented 1 year ago

我出问题的是4.0.12,回滚到了umi4.0.5就没这个问题了

------------------ 原始邮件 ------------------ 发件人: "ant-design/ant-design-pro" @.>; 发送时间: 2022年9月14日(星期三) 中午11:19 @.>; @.**@.>; 主题: Re: [ant-design/ant-design-pro] 🐛 [BUG] 使用antdpro +umi4 菜单及权限问题 (Issue #10103)

请问你这边解决了吗

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>

hb1707 commented 1 year ago

解决方法: https://github.com/ant-design/ant-design-pro/pull/10205

tyanbiao commented 1 year ago

解决方法: #10205

救命恩人啊,这个问题终于解决了!