MST

星途 面试题库

面试题:TypeScript静态方法与属性在复杂业务场景中的应用

在一个Web应用的用户权限管理模块中,设计一个`Permission`类,该类有静态属性表示不同的权限级别(如`ADMIN: 'admin'`,`USER: 'user'`等),以及静态方法用于验证用户权限。例如,有一个静态方法`canAccess`,接收当前用户权限和目标资源所需权限作为参数,返回布尔值表示当前用户是否可以访问该资源。要求考虑权限继承、组合等复杂情况,用TypeScript实现该`Permission`类,并说明设计思路。
41.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 权限级别定义:使用静态属性来定义不同的权限级别,这样便于统一管理和引用。
  2. 权限验证方法canAccess 方法接收当前用户权限和目标资源所需权限作为参数。考虑权限继承和组合,通过预先定义的权限关系规则来判断用户是否有权限访问。
  3. 权限继承和组合:可以通过建立一个权限关系表或者逻辑判断来处理。例如,ADMIN 权限可以继承所有其他权限,某些复杂权限可能是多个简单权限的组合。

TypeScript 代码实现

class Permission {
    // 定义不同的权限级别
    static readonly ADMIN: string = 'admin';
    static readonly USER: string = 'user';
    static readonly GUEST: string = 'guest';

    // 定义权限关系表,这里简单示例,实际可能更复杂
    private static permissionRelations: { [key: string]: string[] } = {
        [Permission.ADMIN]: [Permission.USER, Permission.GUEST],
        [Permission.USER]: [Permission.GUEST]
    };

    // 静态方法用于验证用户权限
    static canAccess(currentPermission: string, requiredPermission: string): boolean {
        if (currentPermission === requiredPermission) {
            return true;
        }
        if (this.permissionRelations[currentPermission]) {
            return this.permissionRelations[currentPermission].includes(requiredPermission);
        }
        return false;
    }
}

示例使用

// 示例调用
console.log(Permission.canAccess(Permission.ADMIN, Permission.USER)); // true
console.log(Permission.canAccess(Permission.USER, Permission.ADMIN)); // false
console.log(Permission.canAccess(Permission.GUEST, Permission.USER)); // false