You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

停车场系统用户权限类图设计:适配Linux式登录需求

停车场系统用户模块设计方案

核心设计思路

采用策略模式+抽象用户类的组合方案,既解决权限逻辑的灵活扩展需求,又匹配Linux式多身份登录的设计要求。策略模式专门封装权限判断逻辑,用户类专注于身份管理与登录核心流程,两者解耦后可快速新增不同权限的用户类型。

类图设计说明

1. 抽象用户基类 (AbstractUser)

作为所有用户类型的父类,封装通用核心逻辑:

  • 属性:username(用户名)、passwordHash(密码哈希值,遵循Linux式加密存储规范)、permissionStrategy(权限策略接口实例)
  • 方法:
    • login(inputPassword: string): boolean:将输入密码加密后与存储的哈希值比对,验证通过则登录成功
    • executeAction(action: string): boolean:委托权限策略判断当前操作是否允许执行
    • 抽象方法 getUserType(): string:子类需实现该方法返回具体身份类型(如"admin"、"regular_user")

2. 具体用户类

  • AdminUser:管理员用户,关联AdminPermissionStrategy
  • RegularUser:普通车主用户,关联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()   |
+-------------------+

关键实现细节

  1. Linux式密码登录:
    • 密码仅存储加密哈希值(如SHA-256),不保留明文
    • login方法对输入密码执行相同加密逻辑后,与存储的哈希值比对,匹配则完成登录
  2. 权限扩展机制:
    • 新增用户类型:继承AbstractUser并关联对应PermissionStrategy实例即可
    • 新增权限规则:实现PermissionStrategy接口,无需修改现有用户类代码
  3. 操作触发流程:
    用户调用executeAction("CREATE_SLOT")时,先通过绑定的策略类判断权限,允许则调用ParkingSystem.createSlot()执行具体操作

策略模式适配性说明

你最初考虑的策略模式完全适配当前场景:权限规则属于独立变化的行为,封装为策略类后,用户类无需关心具体判断逻辑,仅通过切换策略实例即可改变权限范围,完全符合开闭原则,新增权限类型时无需修改原有代码结构。

内容的提问来源于stack exchange,提问作者Zine eddine Boumaza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:40:33