模板文件
====

模板文件中包含自定义auth插件需要的两个文件：CustomAuth.ts和tsconfig.json。

#### 插件模板CustomAuth.ts

import {AuthPlugin} from '../libs/plugins/auth/AuthPlugin';  // 插件文件CustomAuth.ts存储在默认位置（ohpm-repo解压根目录的plugins文件夹内），默认引用地址
export class CustomAuth implements AuthPlugin {
  /\*\*
   \* 用户认证:根据accessToken的值，返回用户的数据:用户的id，用户的名字，用户所属的组织，用户所创建的组织
   \* @param accessToken 用户的accessToken
   \*/
  async auth(accessToken: string): Promise<{
    id: string;                         // 用户的id，保证唯一性
    name: string;                       // 用户的名字，保证唯一性
    belongGroupList: Array<string>;     // 用户所在的组织，具有发布指定组织包的权限
    groupAdminList: Array<string>;      // 用户所管理的组织，具有删除指定组织内包的权限
  }> {
    let id: string, name: string, belongGroupList: Array<string>, groupAdminList: Array<string>;
    return {id, name, belongGroupList, groupAdminList};
  }

  /\*\*
   \* 用户信息获取:根据只读accessToken的值，返回用户的数据:用户id，用户名字，用户所属的组织，用户所创建的组织
   \* @param accessToken 用户的只读accessToken
   \*/
  async authWithReadOnly(accessToken: string): Promise<{
    id: string;                         // 用户的id，保证唯一性
    name: string;                       // 用户的名字，保证唯一性
    belongGroupList: Array<string>;     // 用户所在的组织，具有发指定组织包的权限
    groupAdminList: Array<string>;      // 用户所管理的组织，具有删除指定组织内包的权限
  }> {
    let id: string, name: string, belongGroupList: Array<string>, groupAdminList: Array<string>;
    return {id, name, belongGroupList, groupAdminList};
  }

  /\*\*
   \* 根据用户id,返回用户的名字
   \* @param id 用户的id值
   \*/
  async getUserInfo(id: string): Promise<string> {
    let name: string;
    return name;
  }
}

#### ts编译的配置文件tsconfig.json

// tsconfig.json 文件指定了编译项目所需的根目录下的文件以及编译选项，编译自定义插件文件.ts为.js文件。
{
  "include": \[
    "plugins/\*" // 插件文件的位置
  \],
  "compilerOptions": {
    "target": "es2016",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "module": "commonjs",
    "rootDirs": \[
      "./src",
      "./test"
    \],
    "typeRoots": \[
      "./node\_modules/@types"
    \],
    "types": \[
      "node",
    \],
    "resolveJsonModule": true,
    "outDir": "./plugins/outDir",   // 编译后文件输出的位置
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "alwaysStrict": true,
    "noImplicitReturns": true,
    "skipLibCheck": true
  }
}