今天看同事写的权限管理功能时候发现这样的一个代码
router.beforeEach(async (to: Route, from: Route, next) => {
  if (to.path === "/") {
    authCode && authCode.includes("yhgl-r") ? next("/userManagement") : next("/home");
  }
})
看到这个yhgl-r我想了很久都没想出来是什么意思,还以为是什么用户身份码。
问了同事才知道 yhgl-r 指的是 用户管理只读。
借此想请教两个问题:
1. 后台在定义模块时候大家都是怎么定义的?
比如上述代码中就是用模块名字的首字母缩写来作为模块的 code,觉得挺不灵活优雅的,目前能想到的方案是不用缩写,有咩有其他模块定义方法?
2. 前端拿到一大堆要限制的模块 code 后,有没有什么好的处理方案?
目前见到的都是 v-if/v-show 和控制路由结合来判断是不是显示某个模块,有些模块权限复杂的话就需要一大串的判断语句,代码可读性不怎么好,有没有其他更高明的方法呢?
3. 或者有没有别的更好的权限管理方案
yhgl-r、/userManagement和/home只是为了举例编造的数据
|      1alreadytaken      2020-12-14 17:03:00 +08:00 都是定义一堆权限模型 code,init 的时候拉一下,控制显示及路由 | 
|  |      2tomsun28      2020-12-14 17:15:29 +08:00 如果前端啥都不管,调用 restful api 遇到后端返回无权限 403 时,页面弹出你没有权限亲,这算不算骚操作🤣。jvm 系的后端 restful api 权限控制可以用 [sureness]( https://github.com/tomsun28/sureness) | 
|  |      3yaphets666      2020-12-14 17:24:36 +08:00 我看那个 renrenfast 里头 用 addRoutes 实现权限管理 route 里头没有的路由自然就 404 了 | 
|  |      4lower      2020-12-14 17:36:21 +08:00 让后端 返回 当前用户拥有的权限列表,每次动态展示就行了,没有的权限就不展示咯 | 
|      5VDimos      2020-12-14 17:37:54 +08:00 via Android yhgl-r,这个不会被打吗。。。 | 
|      9whileFalse      2020-12-14 18:05:23 +08:00 @yaphets666 #3 所以每个人的 route 是不同的么。 | 
|  |      10xuanbg      2020-12-14 18:24:34 +08:00 后端返回当前用户可用的导航数据以及功能权限。 | 
|  |      11sybb OP @tomsun28  感谢老哥 学到了 @lower 我理解的您的想法是直接把 route 数据放在后端存,其实上述代码中的 authCode 也是从后端拿到的权限 code 的集合,和您说的区别可能在于我们的项目拿到 code 之后要在前端匹配 判断一番 @VDimos 是的 我当时知道是他表示的实际意思的时候的确很想打人 @cking 我写的是举例的数据,格式是模仿的公司项目里的,就是用了拼音首字母的缩写,是不是很窒息哈哈哈 @alreadytaken 好嘞 心里有数了 感谢感谢 综合几位老哥的观点,心里有点数了,路由的控制应该就是存在后端,前端动态获取并渲染。页面中元素的权限控制大概逃不掉 v-if 、v-show 了 | 
|  |      12creanme      2020-12-14 19:12:58 +08:00 | 
|  |      132I0Mto2kjm0c0B9i      2020-12-14 19:13:31 +08:00 设计一个权限树,包括页面级权限按钮级权限等等。初始化的时候根据权限接口渲染菜单啊页面什么的,路由切换加个钩子就能处理跳转逻辑了 | 
|  |      14sybb OP | 
|      15ImACat      2020-12-14 20:23:31 +08:00 用框架,casbin | 
|  |      16px920906      2020-12-14 20:56:51 +08:00 RBAC 参考下。权限代码用 实体-操作 组合表示,比如 对用户(1)/订单(2)进行增删改查(1234) 表示为 11,12,13,14,21,22,23,24 。一个用户对多个 role,一个 role 对多个权限。 路由,如果前后端交流无障碍,权限相关的代码保持一致,而且后端权限控制能做完善的情况,完全可以前端控制,无非就是展示还是隐藏。 | 
|  |      1712tall      2020-12-15 08:51:53 +08:00  1 介绍都是高大上,写的时候才发现还是那一地鸡毛 | 
|      18Quarter      2020-12-15 09:12:52 +08:00 我们这边只做了页面权限,通过配置好的路由参数在初始化的时候动态加载路由,但是还没想好按钮级别的权限怎么做 | 
|  |      19sybb OP | 
|  |      20KuroNekoFan      2020-12-15 10:02:57 +08:00 dirtywork,粒度多细就有多 dirty | 
|  |      21sybb OP @KuroNekoFan 枯了 | 
|      22Quarter      2020-12-15 10:18:26 +08:00 @sybb 应该是这样的 因为设计到界面的具体功能,必然需要进行判断作不同的 ui 显示或者功能调用,少不了判断的,其实还是写死的各种判断逻辑在里边,所以还是在接口拦截方面可能更好入手一点 | 
|  |      23sybb OP @Quarter 页面控制和接口拦截基本上都会做, 前端页面做了控制就避免不了代码变得很难看了, 看来这个功能注定是个 dirtywork | 
|  |      24px920906      2020-12-15 11:53:42 +08:00 via Android @sybb 只是举例子,具体要限制哪些实体和操作根据你实际情况。这种做法的话,前端页面元素展示与否也容易实现,比如用户列表每一行的编辑用户按钮,用 vue 的话大概就是 v-show="auth.includes(user.update)" | 
|  |      25KuroNekoFan      2020-12-15 14:48:53 +08:00 via iPhone @sybb 我自己没做过,不过如果要我做,那我应该只在前端针对页面级别进行控制,比如 a 用户只能访问哪些 routes,至于具体的 crud 操作权限控制由后端自己处理,前端给出友好提示即可 不过这种有点架构设计的决定好像不是前端说了算的🙃 | 
|  |      26sybb OP | 
|      27rophie123      2021-01-08 12:01:30 +08:00 如果不同用户登录进去显示的界面或者操作逻辑都不太一样,需不需要后端分成两个模块去单独写?实际开发起来并不单单是显不显示某个按钮那么简单吧 |