前端如何落实最小权限原则?
我在做后台管理系统,不同角色能看到的菜单和按钮不一样。现在是用 v-if="user.role === 'admin'" 这种方式控制显示,但感觉权限逻辑散落在各处,不好维护,而且万一漏了某个地方就可能越权操作。
有没有更系统的方法来实现最小权限原则?比如能不能在路由层面或者组件层面统一处理?我试过在路由守卫里判断权限,但动态菜单又得另外处理,有点混乱。
比如我现在有一个编辑按钮,只有特定角色能点:
<button v-if="hasPermission('user:edit')" @click="handleEdit">编辑</button>
但 hasPermission 这个方法每个组件都得引入,而且后端返回的权限字符串格式也不太统一,搞得我很头疼。
首先,确保你的权限数据是从后端获取并存储在全局状态管理工具里。假设你用的是 Vuex,可以在 store 里定义一个模块专门来管理权限:
然后,在路由守卫中检查用户是否有权限访问某个页面:
这样配置路由时,可以指定需要什么权限:
对于组件内的按钮或元素,可以通过自定义指令来处理权限:
然后在模板中使用这个指令:
这样就把权限检查从组件逻辑中抽离出来,代码会干净很多。记得在应用启动时先获取用户的权限列表,然后存入 Vuex 中。希望这些思路对你有帮助。