Laravel 在做前后端分离的时候,如何处理左侧菜单栏?

比如角色A登录了前台,然后后台管理员删除了角色A的文章管理菜单。那么当角色A刷新页面的时候,应该就没有文章管理这个菜单了。
1.如果在登录的时候,将菜单栏返回给前端,那么角色A刷新的时候,依然还会看到文章管理,除非他重新登录。这样不太合理
2.如果在公共控制器里返回菜单栏,那么角色A每次进行操作的时候,都会去查询一遍菜单栏的数据,也不太合理。
3.如果放在中间件里,感觉和公共控制器一个道理(好像比继承公共控制器更麻烦),每次操作都要请求菜单栏的数据。
所以请教一下兄弟们,前后端分离,只写接口的情况下,该如何做这个功能?

@ZLSN
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
cnguu
最佳答案
  1. 每次请求都附带用户信息返回
  2. 只有权限变更才返回
3年前 评论
讨论数量: 8
panda-sir

写个菜单接口呀 :joy:

3年前 评论
ZLSN (楼主) 3年前
cnguu
  1. 每次请求都附带用户信息返回
  2. 只有权限变更才返回
3年前 评论

这有什么所谓呢?不就是他还能看到菜单吗???你不会仅仅通过菜单的显示与隐藏,来做的权限控制吧,,,

3年前 评论
largezhou (作者) 3年前
ZLSN (楼主) 3年前
ZLSN (楼主) 3年前
largezhou (作者) 3年前

你的菜单接口里,给每一个菜单里加一个值hasPermission(当前管理员是否有权限操作/读取此菜单栏目),这个hasPermission是可以根据菜单表和管理员关联查到的,前端根据hasPermission判断展示与否就可以了。

3年前 评论

可以对用户权限变更做版本控制,具体实现如下:

  1. 在用户表定义一个维护用户权限是否下发的字段(如果考虑多端的话,实现相对复杂一些,不过也差不多);
  2. 用户的每个请求肯定需要获取用户模型,那么此时验证用户的该字段是否已经下发,如果没有则在本次请求的响应头中和追加和前端约定好的一个特殊响应头(之所以不在响应体中直接返回权限和菜单信息,是因为考虑到原生移动客户端的 API 数据解析成本)。
  3. 前端请求设置拦截器,如果响应头中包含需要更新权限的信息,则主动拉去最新权限信息和菜单信息。
  4. 在拉去权限和菜单信息的接口中更新用户的权限下发字段。

这样基本可以满足需求,但是要做到用户无感知的话,可以考虑用 websocket,知乎貌似就是会起一个 wss 连接。

3年前 评论

如果你要实时管理权限,那每次刷新就必然要检查权限。

权限是存在数据库的,每次刷新就得查询。

放在中间件就行了,觉得不合理的原因是什么呢?

3年前 评论
songxue77 (作者) 3年前
ZLSN (楼主) 3年前
ZLSN (楼主) 3年前

用一个接口获取菜单列表,在登陆的时候获取数据放在缓存里,如果权限有更新可以把缓存清除,再次获取时,生成新的菜单列表

3年前 评论

这种实时更新的还是前后端分离 1.socket实时通知 2.轮询机制或者每次请求别的接口返回 关于第二点,其实就是之前回答的各个大佬的方案 都可以借鉴

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!