25 lines
2.1 KiB
JavaScript
25 lines
2.1 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import {readFile} from 'node:fs/promises';
|
|
import {pathToFileURL} from 'node:url';
|
|
import {resolve} from 'node:path';
|
|
import test from 'node:test';
|
|
const ts=await import(process.env.KEFU_SSO_TYPESCRIPT?pathToFileURL(process.env.KEFU_SSO_TYPESCRIPT+'/lib/typescript.js').href:'typescript');
|
|
const moduleUrl=source=>`data:text/javascript;base64,${Buffer.from(source).toString('base64')}`;
|
|
const compile=source=>ts.transpileModule(source,{compilerOptions:{module:ts.ModuleKind.ESNext,target:ts.ScriptTarget.ES2022}}).outputText;
|
|
const {default:routes}=await import(moduleUrl(compile(await readFile(new URL('../src/router/routes/modules/console.ts',import.meta.url),'utf8'))));
|
|
const enginePath=process.env.KEFU_SSO_WORKSPACE?pathToFileURL(resolve(process.env.KEFU_SSO_WORKSPACE,'packages/utils/src/helpers/generate-routes-frontend.ts')):new URL('../../../packages/utils/src/helpers/generate-routes-frontend.ts',import.meta.url);
|
|
const engine=await readFile(enginePath,'utf8');
|
|
const tree=ts.createSourceFile('engine.ts',engine,ts.ScriptTarget.Latest,true);
|
|
const functions=tree.statements.filter(node=>ts.isFunctionDeclaration(node)&&['hasAuthority','menuHasVisibleWithForbidden'].includes(node.name?.text)).map(node=>node.getText(tree)).join('\n');
|
|
const {hasAuthority}=await import(moduleUrl(compile(functions+'\nexport {hasAuthority};')));
|
|
test('基础角色只显示我的账号,业务目录使用实际Vben权限算法按子页面读权限开放',()=>{
|
|
const visible=permissions=>routes.filter(route=>!route.meta?.hideInMenu&&hasAuthority(route,permissions)).map(route=>route.name);
|
|
assert.deepEqual(visible([]),['GroupAccount']);
|
|
assert.deepEqual(visible(['model:read']),['GroupAccount','ModelCenter']);
|
|
assert.deepEqual(visible(['config:read']),['GroupAccount','DesktopCenter']);
|
|
assert.deepEqual(visible(['im:content:read']),['GroupAccount','ArchiveCenter']);
|
|
assert.deepEqual(visible(['user:read']),['GroupAccount','SystemCenter']);
|
|
const all=[...new Set(routes.flatMap(route=>(route.children||[]).flatMap(child=>child.meta?.authority||[])))];
|
|
assert.equal(visible(all).length,6);
|
|
});
|