Skip to content

Commit 1994cc8

Browse files
committed
🐛 修复权限通配符设置问题 #416
1 parent 1083dd0 commit 1994cc8

2 files changed

Lines changed: 23 additions & 9 deletions

File tree

src/app/cache_key.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default class CacheKey {
77
}
88

99
static permissionConfirm(scriptUuid: string, confirm: ConfirmParam): string {
10-
return `permission:${scriptUuid}:${confirm.permissionValue || ""}:${confirm.permission || ""}`;
10+
return `permission:${scriptUuid}:${confirm.permission}:${confirm.permissionValue || ""}`;
1111
}
1212

1313
// importFile 导入文件

src/app/service/service_worker/permission_verify.ts

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export default class PermissionVerify {
177177
if (!model) {
178178
// 允许通配
179179
if (confirm.wildcard) {
180-
model = await this.permissionDAO.findByKey(request.uuid, confirm.permission, confirm.permissionValue || "");
180+
model = await this.permissionDAO.findByKey(request.uuid, confirm.permission, "*");
181181
}
182182
}
183183
return Promise.resolve(model);
@@ -315,11 +315,9 @@ export default class PermissionVerify {
315315
const oldConfirm = await this.permissionDAO.findByKey(data.uuid, data.permission, data.permissionValue);
316316
if (!oldConfirm) {
317317
throw new Error("permission not found");
318-
} else {
319-
await this.permissionDAO.delete(this.permissionDAO.key(oldConfirm));
320-
// 删除缓存
321-
Cache.getInstance().del(CacheKey.permissionConfirm(data.uuid, oldConfirm));
322318
}
319+
await this.permissionDAO.delete(this.permissionDAO.key(oldConfirm));
320+
this.clearCache(data.uuid);
323321
}
324322

325323
getScriptPermissions(uuid: string) {
@@ -330,7 +328,7 @@ export default class PermissionVerify {
330328
// 添加权限
331329
async addPermission(permission: Permission) {
332330
await this.permissionDAO.save(permission);
333-
Cache.getInstance().del(CacheKey.permissionConfirm(permission.uuid, permission));
331+
this.clearCache(permission.uuid);
334332
}
335333

336334
// 重置权限
@@ -339,8 +337,24 @@ export default class PermissionVerify {
339337
const permissions = await this.permissionDAO.find((key, item) => item.uuid === uuid);
340338
permissions.forEach((item) => {
341339
this.permissionDAO.delete(this.permissionDAO.key(item));
342-
Cache.getInstance().del(CacheKey.permissionConfirm(uuid, item));
343340
});
341+
this.clearCache(uuid);
342+
}
343+
344+
clearCache(uuid: string) {
345+
return Cache.getInstance()
346+
.list()
347+
.then((keys) => {
348+
// 删除所有以permission:uuid:开头的缓存
349+
return Promise.all(
350+
keys.map((key) => {
351+
if (key.startsWith(`permission:${uuid}:`)) {
352+
return Cache.getInstance().del(key);
353+
}
354+
return Promise.resolve();
355+
})
356+
);
357+
});
344358
}
345359

346360
init() {
@@ -349,7 +363,7 @@ export default class PermissionVerify {
349363
this.group.on("getInfo", this.getInfo.bind(this));
350364
this.group.on("deletePermission", this.deletePermission.bind(this));
351365
this.group.on("getScriptPermissions", this.getScriptPermissions.bind(this));
352-
this.group.on("addPermission", this.getInfo.bind(this));
366+
this.group.on("addPermission", this.addPermission.bind(this));
353367
this.group.on("resetPermission", this.resetPermission.bind(this));
354368

355369
subscribeScriptDelete(this.mq, (data) => {

0 commit comments

Comments
 (0)