Skip to content

权限认证(RBAC模型)

一、基础概念

后台管理系统核心需求是精细化权限控制,行业通用标准实现方案为RBAC。 RBAC全称:Role-Based Access Control,基于角色的访问控制。 核心组成三要素:用户、角色、权限。 核心设计思想:不直接给用户分配权限,而是将权限绑定到角色,再给用户分配角色,简化权限分配管理。

二、数据库表结构设计

方案1:基础5表(核心最小结构)

  1. t_user 用户表:存储账号、密码、基础用户信息
  2. t_role 角色表:定义角色名称(销售主管、销售员、管理员等)
  3. t_permission 权限表:存储接口/操作权限标识(新增产品、删除产品、新增员工)
  4. user_role 用户角色中间表:多对多关联用户与角色,字段user_id、role_id
  5. role_permission 角色权限中间表:多对多关联角色与权限,字段role_id、permission_id

方案2:扩展7表(带菜单管理,后台系统常用)

在5张核心表基础上增加:

  1. t_menu 菜单表:页面菜单路由、层级菜单信息
  2. role_menu 角色菜单中间表:控制角色可见的左侧菜单

三、权限查询执行流程

以用户张三为例完整流程:

  1. 用户登录系统,校验账号密码,获取当前登录用户ID;
  2. 通过用户ID查询user_role中间表,拿到该用户绑定的全部角色;
  3. 通过角色ID查询role_permission中间表,汇总该用户所有权限标识;
  4. 将权限集合存入上下文,接口访问时校验当前接口权限是否在集合内。

关联关系说明:

  • 用户与角色:多对多(一个用户可分配多个角色,一个角色可分配给多个用户)
  • 角色与权限:多对多(一个角色拥有多项权限,一项权限可分配给多个角色)

四、主流权限框架

  1. Spring Security(企业项目推荐) Spring生态原生框架,支持认证、授权、会话管理、防跨域、密码加密,和SpringBoot无缝集成。
  2. Apache Shiro 轻量级权限框架,上手简单,功能完整,适合小型后台项目,微服务分布式场景适配弱于SpringSecurity。

五、完整总结(面试背诵版)

  1. 后台系统权限控制采用RBAC基于角色访问控制模型,核心三要素:用户、角色、权限。
  2. 基础5张数据表完成多对多关联:用户表、角色表、权限表、用户角色中间表、角色权限中间表;需要菜单管理可扩展为7张表。
  3. 权限查询逻辑:登录后根据用户查角色,再通过角色查询全部绑定权限,访问接口时做权限匹配校验。
  4. 项目中使用SpringSecurity实现完整权限认证,内置登录认证、接口鉴权、权限拦截全套能力。

六、面试简答

问:项目里权限认证是怎么实现的?

答: 后台管理系统使用标准RBAC基于角色的权限模型实现权限控制。

  1. 模型核心是用户、角色、权限三层结构,不会直接给用户分配权限,先给角色绑定权限,再给用户分配角色,方便批量管理权限。
  2. 数据库采用5张核心表:用户表、角色表、权限表、用户角色中间表、角色权限中间表,通过两张中间表维护用户-角色、角色-权限的多对多关系;如果需要菜单控制会再加菜单表与角色菜单中间表,共7张。
  3. 权限校验流程:用户登录成功后,根据用户ID查询绑定的所有角色,再根据角色获取全部权限标识,后续访问接口时校验是否拥有对应权限。
  4. 技术框架选用SpringSecurity,统一处理登录认证、接口权限拦截,完成整套权限认证逻辑。

Powered by VitePress 1.6.4 | 持续更新中