资源分类

资源主要分两类:

  • 动态资源:在系统运行当中,通过管理界面创建的资源
  • 静态资源:本质上就是静态原子,当系统启动时,自动初始化到数据库中

下面,我们以模块test-party为例,对静态资源进行说明

定义静态资源

定义一个静态资源数组

src/module/test-party/backend/src/config/static/resources.js

module.exports = app => {
  const moduleInfo = app.meta.mockUtil.parseInfoFromPackage(__dirname);
  const resources = [
    // menu
    {
      atomName: 'Kitchen-sink',
      atomStaticKey: 'kitchenSink',
      atomRevision: 0,
      atomCategoryId: 'a-base:menu.Demonstration',
      resourceType: 'a-base:menu',
      resourceConfig: JSON.stringify({
        actionModule: moduleInfo.relativeName,
        actionPath: 'kitchen-sink/index',
      }),
      resourceRoles: 'root',
    },
  ];
  return resources;
};
  • 静态原子的属性清单,与方法ctx.bean.atom.write中参数item的属性清单基本一致,同时包含基础表aAtom和业务表aResource的数据

  • atomStaticKey:系统会自动添加模块名称作为前缀,从而形成系统唯一的原子Key,比如这里的:test-party:kitchenSink

  • atomRevision: 从0开始。当静态原子有任何属性变更时,将atomRevision依次递增,系统就会自动更新数据库里的数据

  • atomCategoryId: 资源归属目录

    • 基本格式为:{资源类型全称}.{级联目录}
    • 资源类型全称:模块a-base提供了一个资源类型menu,全称为a-base:menu。由于不同模块提供的资源类型统一管理,所以,以资源类型全称作为第一级目录,便于资源目录的分类管理
    • 级联目录:是以.相连的多级目录
    • 系统会自动解析目录结构得到目录Id,如果目录不存在会自动创建
  • resourceType: 资源类型全称

  • resourceConfig: 资源配置信息。不同类型的资源有不同的结构约定

  • resourceConfig.actionModule + actionPath: 这是菜单资源的定义方式:当点击菜单项时,跳转前端页面的路径

  • resourceRoles: 指定资源授权对象。系统会自动解析角色名称得到角色Id,并进行资源授权。有以下可选值:

    • 简单角色名,如root
    • 级联角色名,如template.system
    • 逗号分隔的多个角色名,如root,template.system

注册静态资源

前面定义好一组静态资源,接下来就需要在模块的meta文件中进行注册

src/module/test-party/backend/src/meta.js

const staticResources = require('./config/static/resources.js')(app);

base: {
  statics: {
    'a-base.resource': {
      items: staticResources,
    },
  },
},
名称 说明
a-base.resource 原子类型的全称。在这里,原子类型resource是由模块a-base提供的
items 静态资源数组