主题切换
权限认证(RBAC模型)
一、基础概念
后台管理系统核心需求是精细化权限控制,行业通用标准实现方案为RBAC。 RBAC全称:Role-Based Access Control,基于角色的访问控制。 核心组成三要素:用户、角色、权限。 核心设计思想:不直接给用户分配权限,而是将权限绑定到角色,再给用户分配角色,简化权限分配管理。
二、数据库表结构设计
方案1:基础5表(核心最小结构)
- t_user 用户表:存储账号、密码、基础用户信息
- t_role 角色表:定义角色名称(销售主管、销售员、管理员等)
- t_permission 权限表:存储接口/操作权限标识(新增产品、删除产品、新增员工)
- user_role 用户角色中间表:多对多关联用户与角色,字段user_id、role_id
- role_permission 角色权限中间表:多对多关联角色与权限,字段role_id、permission_id
方案2:扩展7表(带菜单管理,后台系统常用)
在5张核心表基础上增加:
- t_menu 菜单表:页面菜单路由、层级菜单信息
- role_menu 角色菜单中间表:控制角色可见的左侧菜单
三、权限查询执行流程
以用户张三为例完整流程:
- 用户登录系统,校验账号密码,获取当前登录用户ID;
- 通过用户ID查询user_role中间表,拿到该用户绑定的全部角色;
- 通过角色ID查询role_permission中间表,汇总该用户所有权限标识;
- 将权限集合存入上下文,接口访问时校验当前接口权限是否在集合内。
关联关系说明:
- 用户与角色:多对多(一个用户可分配多个角色,一个角色可分配给多个用户)
- 角色与权限:多对多(一个角色拥有多项权限,一项权限可分配给多个角色)
四、主流权限框架
- Spring Security(企业项目推荐) Spring生态原生框架,支持认证、授权、会话管理、防跨域、密码加密,和SpringBoot无缝集成。
- Apache Shiro 轻量级权限框架,上手简单,功能完整,适合小型后台项目,微服务分布式场景适配弱于SpringSecurity。
五、完整总结(面试背诵版)
- 后台系统权限控制采用RBAC基于角色访问控制模型,核心三要素:用户、角色、权限。
- 基础5张数据表完成多对多关联:用户表、角色表、权限表、用户角色中间表、角色权限中间表;需要菜单管理可扩展为7张表。
- 权限查询逻辑:登录后根据用户查角色,再通过角色查询全部绑定权限,访问接口时做权限匹配校验。
- 项目中使用SpringSecurity实现完整权限认证,内置登录认证、接口鉴权、权限拦截全套能力。
六、面试简答
问:项目里权限认证是怎么实现的?
答: 后台管理系统使用标准RBAC基于角色的权限模型实现权限控制。
- 模型核心是用户、角色、权限三层结构,不会直接给用户分配权限,先给角色绑定权限,再给用户分配角色,方便批量管理权限。
- 数据库采用5张核心表:用户表、角色表、权限表、用户角色中间表、角色权限中间表,通过两张中间表维护用户-角色、角色-权限的多对多关系;如果需要菜单控制会再加菜单表与角色菜单中间表,共7张。
- 权限校验流程:用户登录成功后,根据用户ID查询绑定的所有角色,再根据角色获取全部权限标识,后续访问接口时校验是否拥有对应权限。
- 技术框架选用SpringSecurity,统一处理登录认证、接口权限拦截,完成整套权限认证逻辑。