前端如何实现最小权限原则的路由控制?
我在用 React 做后台系统,现在每个菜单项都对应一个路由,但不同角色看到的菜单不一样。我试过在路由配置里加 meta: { roles: ['admin'] },然后在全局守卫里判断,但发现用户还是能通过直接输入 URL 访问没权限的页面。
是不是我的拦截逻辑有问题?比如下面这段路由守卫:
router.beforeEach((to, from, next) => {
const userRole = store.getters.role;
if (to.meta.roles && !to.meta.roles.includes(userRole)) {
next('/403');
} else {
next();
}
});
这样写真的安全吗?还是说前端根本不能只靠路由控制权限?
首先建议明确一点,前端的路由权限控制只能作为用户体验优化,不能完全依赖它来保障安全。真正有效的权限控制必须在后端实现。
不过我们还是可以优化前端逻辑。可以把角色判断改成更严谨的方式:
另外建议给每个页面组件也加上权限校验逻辑,双重保险:
最后别忘了,在后端也要做严格的权限验证,毕竟前端代码都是公开的,容易被破解。说真的,每次写这种权限相关的代码都挺头疼的,细节太多了。