You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

前后端访问控制策略共享的最佳实践及实现方案问询

项目组成

我负责的项目包含2个调用后端REST API的前端应用,目前架构较为简单,但很快会演进。

前端:

  • Web应用(React)
  • 移动端应用(React Native)

后端:

  • REST API(基于Ruby RoR)

访问策略问题

背景:

  • 前端应用需根据访问策略判断特定用户可展示的UI模块
  • 当前采用RBAC+ABAC的混合权限模型

目前缺乏清晰的访问策略管理架构,业务逻辑分散在前后端,引发以下问题:

  • 前后端访问策略代码重复(同一条策略的代码可能在代码库的3个不同位置重复)
  • 前端条件判断复杂:部分场景下需获取多个实体才能判断用户是否可访问某功能

解决方案/思路

我的初步想法是将访问策略逻辑集中在API端,这样可避免重复,所有规则统一管理,后续新增前端应用或API微服务时也更易扩展。

目前的疑问是:如何在前后端之间共享访问策略?

  • 通过API端点暴露此类配置是否为合理的规范?

示例:

route: GET /user/access_policies
response :

{
  author: {
    read: true,
    create: true,
    update: false,
    delete: false
  },
  books: {
    read: true,
    create: true,
    update: true,
    delete: false,
  }
}

此外,是否可在简单CRUD动词之外暴露特定业务策略:

{
  books: {
    read: true,
    create: false,
    update: false,
    delete: false,
    deleteOwnBooks: true, // custom business policy (only delete the books owned by the current user)
    deletePublishedBook: true, // same

  }
}

关于此类访问策略的共享,您是否有其他建议或最佳实践?

更新(2023年12月5日)

我们最终采用了以下方案:在User资源中暴露全局权限。

type User = {
  id: string
  permissions: {
    author: {
      read: boolean,
      create: boolean,
      update: boolean,
      delete: boolean
    },
    books: {
      read: boolean,
      create: boolean,
      update: boolean,
      delete: boolean // Your user role allow you to delete books
    }
  }
}

为实现细粒度资源权限,我们直接在对应资源中暴露权限。

type Book = {
  id: string
  name: string
  permissions: {
    // Can only delete own books
    // Can only delete published books
    delete: boolean
  }
}

目前该模式能很好满足需求,但需注意性能问题,因为会增加额外计算。我们通常通过REST API的专用查询参数,按需查询权限来解决。

内容的提问来源于stack exchange,提问作者Simon Bruneaud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:55:20