权限管理入门:认证 vs 授权,以及通用权限模型

简介: 权限管理是企业系统安全的核心,涵盖认证(你是谁)与授权(你能做什么)。常用RBAC模型通过角色实现灵活授权,微服务架构下则需结合JWT、网关鉴权与分布式权限协同设计,确保系统安全可控。

在几乎所有企业级系统中,权限管理都是安全体系的核心。简单来说,它解决两个根本问题:

你是谁?(认证)

你能做什么?(授权)

这两个环节共同构成了用户访问系统的“守门人”。


1. 什么是权限管理?

✅ 认证(Authentication)—— “你是谁?”

这是登录过程的核心。

系统通过用户名 + 密码(或其他凭证,如短信、OAuth2、JWT)验证用户身份是否合法。

  • 成功 → 登录进入系统;
  • 失败 → 提示“用户名或密码错误”。

这一步只关心“你是不是系统里的用户”,不涉及你能干什么。

✅ 授权(Authorization)—— “你能做什么?”

登录成功后,系统根据你的身份(通常是角色)决定:

  • 能看到哪些菜单?
  • 能访问哪些接口?
  • 能操作哪些数据?

比如:

  • 普通员工只能查看自己的报销单;
  • 财务人员可以审批所有报销;
  • 管理员能看到整个组织架构。

这就是基于权限的资源控制,防止越权操作、数据泄露或流程混乱。

📌 一个完整的权限系统 = 认证 + 授权


2. 通用权限管理模型

为了高效实现授权逻辑,业界总结了几种经典模型。最常用的是 RBAC(基于角色的访问控制),但了解其他模型有助于技术选型。

(1)ACL(Access Control List)—— 访问控制列表

  • 核心思想:直接在资源上绑定“谁可以访问”。
  • 例如:文件 A 允许 用户1、用户3 读写。
  • 优点:简单直观;
  • 缺点:用户一多,维护成本爆炸式增长。

适合小型系统或资源粒度极细的场景(如操作系统文件权限)。


(2)RBAC(Role-Based Access Control)—— 基于角色的访问控制 ✅(最主流)

  • 核心思想:引入“角色”作为中间层。
用户 ——<分配>——> 角色 ——<拥有>——> 权限(菜单/接口/按钮)
  • 例如:
  • 创建角色 “财务专员”;
  • 给该角色分配 “查看报销单”、“审批报销” 权限;
  • 将用户张三分配到该角色。
  • 优点
  • 权限管理集中、灵活;
  • 新增用户只需分配角色,无需逐个赋权;
  • 支持角色继承(如“超级管理员”包含所有角色权限)。

💡 几乎所有后台管理系统(如 OA、ERP、CMS)都采用 RBAC 模型。


(3)其他模型(扩展了解)

模型 全称 特点
DAC Discretionary Access Control 资源拥有者自主授权(如 Linux 文件 chmod)
MAC Mandatory Access Control 系统强制控制,用户不可更改(用于军事/高安全场景)
ABAC Attribute-Based Access Control 基于属性动态判断(如“工作时间+部门+安全等级”组合决策),灵活性极高,但复杂

在微服务架构中,RBAC 仍是主流,但可结合 ABAC 实现更细粒度的动态权限(如数据行级权限)。


3. 微服务下的权限挑战

在单体应用中,权限逻辑集中在一处;但在微服务架构中:

  • 用户认证通常由 统一认证中心(如 OAuth2 + JWT)处理;
  • 各微服务需自行校验 JWT 中的角色/权限信息;
  • 权限数据可能分散在不同服务中(如用户服务管角色,订单服务管订单权限);
  • 需要设计 权限同步机制权限查询 API

因此,现代权限系统往往:

  • 使用 JWT Token 携带用户角色和权限声明;
  • 在网关层做初步鉴权;
  • 在业务服务中做细粒度授权校验。

小结

  • 认证 = 登录,确认身份
  • 授权 = 控制能访问什么
  • RBAC 是最实用、最广泛采用的权限模型
  • 微服务下需将权限体系与认证中心、API 网关协同设计。


相关文章
|
19天前
|
SQL 安全 数据库
GoWind Admin|风行 — 开箱即用的企业级全栈中后台框架:数据权限体系设计与实现
GoWind Admin(风行)是开箱即用的企业级全栈中后台框架,内置五层数据权限体系:租户隔离、业务单元、行级、列级、操作/状态级,支持多租户、ABAC动态策略与非侵入式DataScope引擎,实现安全合规、灵活可扩展的权限管理。(239字)
285 2
|
2月前
|
SQL Java 数据库连接
MyBatis 分页机制详解:从 RowBounds 到物理分页实践
MyBatis分页策略解析:逻辑分页(RowBounds)将全量数据加载至内存,仅适用于小数据量;物理分页通过SQL层面限制返回数据,性能更优。推荐使用PageHelper插件,自动适配数据库方言,一行代码实现高效分页,避免OOM风险,提升系统稳定性。
|
2月前
|
JSON 安全 fastjson
使用阿里巴巴 Fastjson 替代 Spring Boot 默认的 Jackson
本文介绍在 Spring Boot 项目中如何替换默认的 Jackson,集成阿里巴巴 Fastjson 作为 JSON 处理框架。内容涵盖 Fastjson 与 Jackson 的核心对比、依赖配置、自定义消息转换器、null 值统一处理及循环引用控制,并提供安全建议与最佳实践,助你高效、安全地使用 Fastjson。
|
2月前
|
SQL Java 数据库连接
Spring Boot 使用 SLF4J 进行日志记录
本课讲解Java开发中日志的最佳实践,摒弃System.out.println(),采用SLF4J+Logback方案。涵盖日志级别、配置文件编写、格式化输出与滚动策略,提升系统可观测性与维护效率。
|
2月前
|
监控 前端开发 Java
Spring Boot 统一异常处理与全局响应增强
本文介绍如何在Spring Boot中实现全局异常处理,通过`@RestControllerAdvice`和自定义`BusinessException`统一拦截异常,结合`JsonResult`标准化响应格式,避免信息泄露,提升前后端协作效率与系统健壮性。
|
2月前
|
Java API 数据库
Spring Boot 中的项目属性配置
本课讲解Spring Boot外部化配置,通过`application.yml`管理数据库、API地址等动态参数,避免硬编码。掌握`@Value`读取配置、多环境Profile切换,并了解敏感信息加密与配置中心实践,提升系统灵活性与安全性。(238字)
|
2月前
|
Java Spring
Spring Boot 中的 @RequestParam:获取查询参数与表单数据
`@RequestParam` 用于提取 HTTP 请求中的查询参数或表单数据,支持设置参数名、是否必填及默认值。适用于 `?key=value` 形式或 POST 表单,字段多时推荐封装为实体类自动绑定,与 `@PathVariable` 按路径取值不同,用途明确,是处理 Web 请求的常用方式。
|
2月前
|
Java API Spring
Spring Boot 中的 @PathVariable:获取 RESTful 路径参数
在Spring Boot中,`@PathVariable`用于提取RESTful API URL中的动态参数。支持单个或多个路径变量,参数名一致时可省略value属性,不一致时需显式绑定,是构建清晰、语义化接口的关键注解之一。
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
695 0
|
8月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
1153 1