@winner-fed/plugin-access
Version:
适配 access(权限)的 WinJS 插件,适用于 Vue3。
63 lines (62 loc) • 3.12 kB
JavaScript
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 };