前后端分离API路由权限

CabloyJS是前后端分离的框架。前后端分离对后端API路由权限控制提出了更高的要求。因此,权限的核心就是对后端API路由权限控制

资源API路由的关系

API路由的目的是向前端提供相应的API服务,在这里我们称之为资源。于是,一个或多个API路由对应一个资源

在实际操作中,是针对资源授权,然后在API路由中指定此路由对应哪个资源,从而实现对API路由的访问控制

如,资源标签管理,包含以下一组API路由

a-baseadmin/backend/src/routes.js

  1. 1 {
  2. 2 method: 'post',
  3. 3 path: 'tag/add',
  4. 4 controller: 'tag',
  5. 5 meta: { right: { type: 'resource', module: 'a-settings', name: 'settings' } },
  6. 6 },
  7. 7 {
  8. 8 method: 'post',
  9. 9 path: 'tag/save',
  10. 10 controller: 'tag',
  11. 11 meta: { right: { type: 'resource', module: 'a-settings', name: 'settings' } },
  12. 12 },
  13. 13 {
  14. 14 method: 'post',
  15. 15 path: 'tag/delete',
  16. 16 controller: 'tag',
  17. 17 meta: { right: { type: 'resource', module: 'a-settings', name: 'settings' } },
  18. 18 }

广义的资源资源概念的延伸

从狭义上来看,资源主要管理API路由菜单

但从广义上看,资源还可以管理各种可授权对象,比如,PC布局中的边栏面板头部按钮,仪表板中的部件,等等。将其作为资源管理,就可以通过资源授权控制不同的角色使用不同的资源

资源原子的关系

由于原子本身具备大量基础特性,CabloyJS 4.0基于原子实现了一个原子类型:资源,使得资源既便于使用,也便于扩展

src/module-system/a-base-sync/backend/src/meta.js

  1. 1const meta = {
  2. 2 base: {
  3. 3 atoms: {
  4. 4 resource: {
  5. 5 info: {
  6. 6 bean: 'resource',
  7. 7 title: 'Resource',
  8. 8 tableName: 'aResource',
  9. 9 tableNameModes: {
  10. 10 },
  11. 11 category: true,
  12. 12 tag: true,
  13. 13 },
  14. 14 },
  15. 15 },
  16. 16 },
  17. 17};

资源的特点

由于资源本身就就是原子,因此具备以下特点

  1. 支持排序:可调整资源的显示次序
  2. 支持目录:目录可调整显示次序、可设置隐藏目录
  3. 支持标签
  4. 支持静态原子:可提供内置资源,并提供初始授权,可实现版本控制
  5. 任何业务模块均可提供自己的资源类型,自动纳入资源的统一管理架构