修改features/console中initAvailMenus方法,当path为空字符串时sourceEntity与destEntity一致

This commit is contained in:
lxy 2024-10-11 17:11:13 +08:00
parent c45665d324
commit 1340a70752
3 changed files with 111 additions and 75 deletions

View File

@ -51,29 +51,40 @@ export default class Console extends Feature {
const schema = this.cache.getSchema();
this.availMenus = this.menus.map((menu) => {
const { destEntity, path, ...rest } = menu;
if (path && destEntity) {
const paths = path.split('.');
if (destEntity) {
let sourceEntity = destEntity;
paths.forEach((ele) => {
const rel = judgeRelation(schema, sourceEntity, ele);
if (rel === 2) {
sourceEntity = ele;
}
else if (typeof rel === 'string') {
sourceEntity = rel;
}
else {
assert(rel instanceof Array);
sourceEntity = rel[0];
}
});
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
};
if (path) {
const paths = path.split('.');
paths.forEach((ele) => {
const rel = judgeRelation(schema, sourceEntity, ele);
if (rel === 2) {
sourceEntity = ele;
}
else if (typeof rel === 'string') {
sourceEntity = rel;
}
else {
assert(rel instanceof Array);
sourceEntity = rel[0];
}
});
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
};
}
else {
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
};
}
}
return {
...menu,

View File

@ -53,29 +53,40 @@ class Console extends Feature_1.Feature {
const schema = this.cache.getSchema();
this.availMenus = this.menus.map((menu) => {
const { destEntity, path, ...rest } = menu;
if (path && destEntity) {
const paths = path.split('.');
if (destEntity) {
let sourceEntity = destEntity;
paths.forEach((ele) => {
const rel = (0, relation_1.judgeRelation)(schema, sourceEntity, ele);
if (rel === 2) {
sourceEntity = ele;
}
else if (typeof rel === 'string') {
sourceEntity = rel;
}
else {
(0, assert_1.assert)(rel instanceof Array);
sourceEntity = rel[0];
}
});
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
};
if (path) {
const paths = path.split('.');
paths.forEach((ele) => {
const rel = (0, relation_1.judgeRelation)(schema, sourceEntity, ele);
if (rel === 2) {
sourceEntity = ele;
}
else if (typeof rel === 'string') {
sourceEntity = rel;
}
else {
(0, assert_1.assert)(rel instanceof Array);
sourceEntity = rel[0];
}
});
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
};
}
else {
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
};
}
}
return {
...menu,

View File

@ -91,42 +91,56 @@ export default abstract class Console<ED extends EntityDict & BaseEntityDict, OM
this.checkAvailMenus();
}
private initAvailMenus() {
private initAvailMenus() {
const schema = this.cache.getSchema();
this.availMenus = this.menus.map(
(menu) => {
const { destEntity, path, ...rest } = menu;
if (path && destEntity) {
const paths = path.split('.');
if (destEntity) {
let sourceEntity = destEntity;
paths.forEach(
(ele) => {
const rel = judgeRelation(schema, sourceEntity, ele);
if (rel === 2) {
sourceEntity = ele as keyof ED;
}
else if (typeof rel === 'string') {
sourceEntity = rel as keyof ED;
}
else {
assert(rel instanceof Array);
sourceEntity = rel[0] as keyof ED;
}
}
);
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
} as OMenu & {
sourceEntity?: keyof ED;
available: boolean | null;
};
if (path) {
const paths = path.split('.');
paths.forEach(
(ele) => {
const rel = judgeRelation(schema, sourceEntity, ele);
if (rel === 2) {
sourceEntity = ele as keyof ED;
}
else if (typeof rel === 'string') {
sourceEntity = rel as keyof ED;
}
else {
assert(rel instanceof Array);
sourceEntity = rel[0] as keyof ED;
}
}
);
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
} as OMenu & {
sourceEntity?: keyof ED;
available: boolean | null;
};
} else {
return {
destEntity,
path,
sourceEntity,
available: null,
...rest,
} as OMenu & {
sourceEntity?: keyof ED;
available: boolean | null;
};
}
}
return {
...menu,
@ -203,7 +217,7 @@ export default abstract class Console<ED extends EntityDict & BaseEntityDict, OM
default: {
assert(actions?.length);
assert(typeof path === 'string');
if (sourceEntity === entity) {
if (this.isRoot) {
available = true;
@ -211,7 +225,7 @@ export default abstract class Console<ED extends EntityDict & BaseEntityDict, OM
else if (this.userId) {
assert(actionAuths);
available = !!actionAuths.find(
actionAuth => intersection(actionAuth.deActions, actions).length > 0 && actionAuth.path!.destEntity === destEntity && path === actionAuth.path!.value
actionAuth => intersection(actionAuth.deActions, actions).length > 0 && actionAuth.path!.destEntity === destEntity && path === actionAuth.path!.value
);
}
}