跳转到内容

安全与 RBAC

StackRivet 的访问控制默认拒绝:受保护端点除非有权限显式放行,否则一律拒绝。生成的模块带着权限注解发布,所以新模块默认就是锁住的,而不是不小心敞开。

  • Spring Security + 可撤销的 Token。 登录时服务端校验凭证、加载用户的角色与权限、签发 token;token 可撤销(如强制下线)。
  • 登录日志记录每次成功与失败(含失败原因);内置登录失败锁定
  • 密码以强 hash 存储——绝不明文。密码、token、密钥绝不进日志。
sequenceDiagram
  actor 用户
  participant Web
  participant API as Auth API
  participant Sec as Security
  participant DB as 数据库
  用户->>Web: 输入账号 + 密码
  Web->>API: POST /api/v1/auth/login
  API->>Sec: 校验凭证
  Sec->>DB: 加载用户、角色、权限
  DB-->>Sec: 权限上下文
  Sec-->>API: 签发 token
  API-->>Web: token、用户信息、菜单
  Web->>API: 受保护请求(Bearer token)
  API->>Sec: 认证 + 授权
  Sec-->>API: 放行或拒绝(401 / 403)

授权在五个不同层面强制——单靠 UI 隐藏从来不是控制手段:

控制强制点
菜单用户看到哪些导航服务端下发的菜单树
按钮哪些 UI 操作可用权限指令 / 组件
API用户可调用哪些服务端端点@PreAuthorize 式注解 + URL matcher
数据查询能返回哪些行查询拦截器(见下)
资产私有文件的访问签发 signed URL 前做权限校验

默认响应:未认证 401,未授权 403

Community 版即内置标准的企业组织模型:

  • 用户角色部门岗位
  • 菜单、按钮、API 权限菜单挂在角色上。

角色聚合权限;用户被分配角色(及部门/岗位),有效权限集在登录时解析。

行级数据范围不是前端的便利功能——它在持久化层强制。

  • Community 版通过 DataPermissionInterceptor 强制 本人 / 部门 / 部门及以下 / 全部 四种范围,把范围条件注入查询。它不是前端隐藏。
  • 该机制通过 DataScopeTableContributor SPI 可扩展。机制随 Community 一起落地自定义数据权限策略在 Pro / Enterprise 启用(“机制前置、按版解锁”思路)。

这一点很重要,因为最常见的访问控制 bug——“行在 UI 里被隐藏了,但 API 还是把它返回了”——在结构上被杜绝。

  • 任何地方都不存明文密码。
  • 任何日志行都不含密码、token、密钥。
  • 私有文件在签发 signed URL 之前必须做权限校验——signed URL 绝不无条件发放。

本文档所述的 Community 版包含:账号密码登录、JWT/token 管理、登录日志与锁定、基础密码策略、会话管理、强制下线、完整 RBAC,以及基础数据权限范围。

企业级认证能力——MFA、OIDC、SAML、LDAP/AD、企业 SSO(企业微信 / 钉钉 / 飞书)与单点登出——不在 Community 内;详见价格页。架构为它们留了干净的扩展点。