harsima / vue-backend

简单的后台管理框架
MIT License
883 stars 347 forks source link

前端的按钮级别权限控制,还需要后端做权限处理吗? #15

Closed vickhello closed 6 years ago

vickhello commented 6 years ago

请问,这个按钮级别的权限控制,还需要后端做权限处理吗?

harsima commented 6 years ago

必须需要! 前端需要权限只是做展示。如果接口本身不具备鉴权方法的话,那么在单独测试API时则没有对应权限的概念了。这非常致命,直接说明就是根本没做权限。 至于接口的权限实际上是后端的工作,前端不需要考虑

vickhello commented 6 years ago

后端返回给前端权限判断需要的结果即可,是吧?

harsima commented 6 years ago

是的。如果当前用户没有访问接口权限,可以返回以前约定好的错误码或者401/403错误即可。如果返回401/403,本项目会直接跳转到403页面,当然,你可以去掉这样的跳转,仅显示错误提示信息

vickhello commented 6 years ago

请问,什么账号登陆后可以看到“完整示例--->列表页面”中的“修改”按钮?

harsima commented 6 years ago

这里是刚刚发现的BUG,现在已修复。 你可以对src/components/platformCom/hasPermission/index.js文件进行如下修改,以保证当前的正常使用

...
if(permissionList && permissionList.length && !permissionList.includes(binding.value)){
    el.parentNode.removeChild(el)
}

16

vickhello commented 6 years ago

该问题已解决,慢慢搞清楚了这个系统权限操作。在用户登陆后,后端将用户的权限菜单,以及权限操作(即是否显示按钮)(其实就是系统mock中的navlist.js的数据)返回给前端,前端根据这个结果进行显示。

vickhello commented 6 years ago

但是模板系统中的权限代码,还没有怎么看懂。

harsima commented 6 years ago

我先说明一下我的权限模型: 首先,所有菜单可以在单独页面进行配置,即菜单本身结构不固定; 其次,不同用户登录,加载的菜单可能不同;

所以,登录后返回的数据是真正的该用户当前可用菜单,下文以“菜单数据”表示该数据。 如果某些页面拥有按钮操作权限限制,则也在菜单数据中体现。

因为菜单结构不固定,所以异步路由中需要将所有数据拍平。不能使用嵌套路由的写法,否则会造成大量的循环匹配(匹配内容下文说)

因为涉及到按钮操作权限,不可能每次进入页面时再检查菜单数据,所以需要把菜单数据中的权限同步到路由中。这样进入页面时就可以通过路由自带的方法来判断,而不用大范围的循环了。

按照这样的思路形成了菜单权限的写法。如果实际中没有这么复杂的话是可以简化的。

如果有其他问题请开新的issue