面试题答案
一键面试- 使用TypeScript装饰器添加权限验证逻辑:
type Permission ='read' | 'write'; const userPermissions: Permission[] = []; function checkPermission(permission: Permission) { return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) { const originalMethod = descriptor.value; descriptor.value = function (...args: any[]) { if (userPermissions.includes(permission)) { return originalMethod.apply(this, args); } else { throw new Error('没有足够的权限'); } }; return descriptor; }; } class MyClass { @checkPermission('read') readMethod() { console.log('执行读取操作'); } @checkPermission('write') writeMethod() { console.log('执行写入操作'); } }
- 动态设置用户权限并实时检查:
- 动态设置用户权限:可以通过一个函数来修改
userPermissions
数组。例如:
function setUserPermissions(permissions: Permission[]) { userPermissions.length = 0; userPermissions.push(...permissions); }
- 实时检查:在调用类方法时,装饰器中的逻辑会实时检查
userPermissions
数组中是否包含所需的权限。如果包含,则执行方法;否则,抛出错误。
const myInstance = new MyClass(); setUserPermissions(['read']); try { myInstance.readMethod(); myInstance.writeMethod();// 这里会抛出没有足够权限的错误 } catch (error) { console.error(error.message); }
- 动态设置用户权限:可以通过一个函数来修改
在上述代码中,checkPermission
装饰器接收一个权限参数,并在装饰的方法被调用时检查用户是否具有该权限。setUserPermissions
函数用于动态设置用户权限,而类方法调用时会实时依据当前设置的用户权限进行权限检查。