停车场系统用户权限类图设计:适配Linux式登录需求
停车场系统用户模块设计方案
核心设计思路
采用策略模式+抽象用户类的组合方案,既解决权限逻辑的灵活扩展需求,又匹配Linux式多身份登录的设计要求。策略模式专门封装权限判断逻辑,用户类专注于身份管理与登录核心流程,两者解耦后可快速新增不同权限的用户类型。
类图设计说明
1. 抽象用户基类 (AbstractUser)
作为所有用户类型的父类,封装通用核心逻辑:
- 属性:
username(用户名)、passwordHash(密码哈希值,遵循Linux式加密存储规范)、permissionStrategy(权限策略接口实例) - 方法:
login(inputPassword: string): boolean:将输入密码加密后与存储的哈希值比对,验证通过则登录成功executeAction(action: string): boolean:委托权限策略判断当前操作是否允许执行- 抽象方法
getUserType(): string:子类需实现该方法返回具体身份类型(如"admin"、"regular_user")
2. 具体用户类
AdminUser:管理员用户,关联AdminPermissionStrategyRegularUser:普通车主用户,关联RegularPermissionStrategy- 可快速扩展其他类型(如
ValetUser代客泊车员),仅需新增对应子类和匹配的策略类
3. 权限策略接口 (PermissionStrategy)
定义权限判断的统一标准:
isAllowed(action: string): boolean:接收操作标识,返回该操作是否被允许- 常用操作标识示例:
CREATE_SLOT、VIEW_STATISTICS、ISSUE_TICKET、PROCESS_EXIT
4. 具体权限策略类
AdminPermissionStrategy:允许所有系统操作,重写isAllowed方法默认返回true(可按需细化部分权限限制)RegularPermissionStrategy:仅允许车主相关操作(如ISSUE_TICKET、PROCESS_EXIT)GuestPermissionStrategy:仅允许停车场状态查看等只读操作
5. 抽象停车场系统依赖
无需细化现有entries、cars等类,只需定义ParkingSystem抽象类提供操作入口:
- 方法示例:
createSlot()、generateStatistics()、issueTicket()、processExit()
类图结构(文本化表示)
+-------------------+ +-----------------------+ | AbstractUser | | PermissionStrategy | +-------------------+ +-----------------------+ | - username |<>----->| + isAllowed(action):bool | | - passwordHash | +-----------------------+ | - permissionStrategy | ^ +-------------------+ /|\ | + login(inputPwd):bool | | | + executeAction(action):bool | | | # getUserType():string | | +-------------------+ | /|\ | | | +-------------------+ +-----------------------+ | AdminUser | | AdminPermissionStrategy | +-------------------+ +-----------------------+ | # getUserType():string | | + isAllowed(action):bool | +-------------------+ +-----------------------+ /|\ | | | +-------------------+ +-----------------------+ | RegularUser | | RegularPermissionStrategy | +-------------------+ +-----------------------+ | # getUserType():string | | + isAllowed(action):bool | +-------------------+ +-----------------------+ +-------------------+ | ParkingSystem | +-------------------+ | + createSlot() | | + generateStatistics()| | + issueTicket() | | + processExit() | +-------------------+
关键实现细节
- Linux式密码登录:
- 密码仅存储加密哈希值(如SHA-256),不保留明文
login方法对输入密码执行相同加密逻辑后,与存储的哈希值比对,匹配则完成登录
- 权限扩展机制:
- 新增用户类型:继承
AbstractUser并关联对应PermissionStrategy实例即可 - 新增权限规则:实现
PermissionStrategy接口,无需修改现有用户类代码
- 新增用户类型:继承
- 操作触发流程:
用户调用executeAction("CREATE_SLOT")时,先通过绑定的策略类判断权限,允许则调用ParkingSystem.createSlot()执行具体操作
策略模式适配性说明
你最初考虑的策略模式完全适配当前场景:权限规则属于独立变化的行为,封装为策略类后,用户类无需关心具体判断逻辑,仅通过切换策略实例即可改变权限范围,完全符合开闭原则,新增权限类型时无需修改原有代码结构。
内容的提问来源于stack exchange,提问作者Zine eddine Boumaza
相关产品推荐
相关产品推荐

