UNPKG

@winner-fed/plugin-access

Version:

适配 access(权限)的 WinJS 插件,适用于 Vue3。

63 lines (62 loc) 3.12 kB
import { readFileSync } from "node:fs"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; import { Mustache } from "@winner-fed/utils"; const getCurrentDir = ()=>{ if ('undefined' != typeof __dirname) return __dirname; return dirname(fileURLToPath(import.meta.url)); }; const ACCESS_TEMPLATES_DIR = join(getCurrentDir(), '../templates'); const DIR_NAME = 'plugin-access'; const src = (api)=>{ api.describe({ key: 'access', config: { schema ({ zod }) { return zod.object({ roles: zod.record(zod.string(), zod.array(zod.string())).describe("\u89D2\u8272\u4E0E\u6743\u9650\u6620\u5C04\u914D\u7F6E\u3002\u952E\u4E3A\u89D2\u8272\u540D\u79F0\uFF08\u5982 admin\u3001user\u3001guest\uFF09\uFF0C\u503C\u4E3A\u8BE5\u89D2\u8272\u62E5\u6709\u7684\u6743\u9650\u8DEF\u5F84\u6570\u7EC4\u3002\u652F\u6301\u901A\u914D\u7B26\u6A21\u5F0F\uFF08\u5982 /users/* \u5339\u914D\u6240\u6709\u7528\u6237\u5B50\u8DEF\u5F84\uFF09\u3002\u6743\u9650\u8DEF\u5F84\u7528\u4E8E\u8DEF\u7531\u548C\u7EC4\u4EF6\u7EA7\u522B\u7684\u8BBF\u95EE\u63A7\u5236\u3002").default({}) }).describe("WinJS \u6743\u9650\u63A7\u5236\u63D2\u4EF6\u914D\u7F6E\u3002\u63D0\u4F9B\u57FA\u4E8E\u89D2\u8272\u7684\u6743\u9650\u7BA1\u7406\u7CFB\u7EDF\uFF08RBAC\uFF09\uFF0C\u652F\u6301\u8DEF\u7531\u7EA7\u548C\u7EC4\u4EF6\u7EA7\u7684\u8BBF\u95EE\u63A7\u5236\uFF0C\u5305\u542B\u540C\u6B65\u5F02\u6B65\u6743\u9650\u68C0\u67E5\u3001\u8DEF\u5F84\u6A21\u5F0F\u5339\u914D\u7B49\u529F\u80FD\u3002").required(); } }, enableBy: api.EnableBy.config }); api.onGenerateFiles(()=>{ const { roles = {} } = api.userConfig.access || {}; const accessTpl = readFileSync(join(ACCESS_TEMPLATES_DIR, 'core.tpl'), 'utf-8'); api.writeTmpFile({ path: join(DIR_NAME, 'index.ts'), noPluginDir: true, content: Mustache.render(accessTpl, { roles: JSON.stringify(roles) }), context: {} }); api.writeTmpFile({ path: join(DIR_NAME, 'runtime.ts'), noPluginDir: true, content: readFileSync(join(ACCESS_TEMPLATES_DIR, 'runtime.tpl'), 'utf-8') }); api.writeTmpFile({ path: join(DIR_NAME, 'createComponent.ts'), noPluginDir: true, content: readFileSync(join(ACCESS_TEMPLATES_DIR, 'createComponent.tpl'), 'utf-8') }); api.writeTmpFile({ path: join(DIR_NAME, 'createDirective.ts'), noPluginDir: true, content: readFileSync(join(ACCESS_TEMPLATES_DIR, 'createDirective.tpl'), 'utf-8') }); api.writeTmpFile({ path: join(DIR_NAME, 'types.d.ts'), noPluginDir: true, content: readFileSync(join(ACCESS_TEMPLATES_DIR, 'types.d.ts'), 'utf-8') }); }); api.addRuntimePluginKey(()=>[ 'access' ]); api.addRuntimePlugin(()=>[ `${api.paths.absTmpPath}/${DIR_NAME}/runtime.ts` ]); }; export { src as default };