登录权限设置

214 阅读2分钟

1. 问题:你们项目是如何实现用户登录权限校验的?整体流程是什么?

我们项目采用前后端分离的权限校验机制。前端在用户登录后会保存后端返回的JWT token(见web-admin/src/utils/request.tsweb-company/src/utils/token.ts),每次请求时通过请求拦截器自动携带token。后端(如web-server/middleware/AuthMiddleware.js)会在受保护的接口校验token的有效性和用户权限,校验不通过则返回401或403错误。这样保证了只有登录且有权限的用户才能访问对应资源。


2. 问题:你们如何区分不同角色(如管理员和普通用户)的权限?权限数据存储在哪里?

我们在用户表(如web-server/models/UserModel.js)中为每个用户设置了角色字段(如role: 'admin'或'user')。登录时,后端会将用户角色信息写入JWT token。前端可以根据token中的角色信息动态渲染菜单(见web-admin/src/store/modules/menu.ts)和页面内容。后端接口(如web-server/controllers/admin/UserController.js)会根据角色判断是否有权限执行某些操作,实现细粒度的权限控制。


3. 问题:前端如何根据用户权限动态控制页面和菜单的显示?

前端在用户登录后会解析token中的角色信息,并存储在全局store(如web-admin/src/store/index.ts)。菜单数据(如web-admin/src/api/menu.ts)会根据角色过滤,只显示有权限的菜单项。页面路由(如web-admin/src/router/config.ts)也会根据用户角色动态添加或移除,防止未授权用户访问受限页面。这样实现了前端的动态权限渲染。


4. 问题:后端如何保护接口,防止未授权用户访问敏感数据?

后端通过中间件(如web-server/middleware/AuthMiddleware.js)对受保护接口进行权限校验。中间件会解析请求头中的token,验证其有效性,并根据token中的角色信息判断是否有权限访问该接口。例如,只有role为'admin'的用户才能访问/admin相关接口。未通过校验的请求会被拦截并返回401或403错误,保证数据安全。


5. 问题:如果token过期或无效,用户体验如何保障?你们是如何处理的?

如果token过期或无效,后端会返回401错误。前端的响应拦截器(如web-admin/src/utils/request.ts)会统一捕获401状态,自动清除本地token并跳转到登录页,提示用户重新登录。这样可以避免用户在无效会话下操作,提升安全性和用户体验。同时,token设置了合理的过期时间,减少频繁登录的困扰。