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

OOAD中如何处理多用户不同权限共享实体的属性设计?

核心结论:权限信息必须与View实体解耦,单独管理

绝对不要把权限属性加到View实体里,原因很直接:

  • 违反单一职责原则:View的核心职责是封装视图本身的固有属性(名称、显示内容等),权限是用户/角色对视图的访问规则,属于访问控制范畴,和View本身的属性没有紧密耦合。硬塞进去会让View类承担双重职责,后续修改权限规则(比如新增权限类型)都要改动View,维护成本陡增。
  • 无法适配多用户多权限场景:一个View被多个用户以不同权限访问时,如果权限存在View里,要么只能存储单一默认权限(满足不了多用户差异),要么冗余存储多组权限数据(导致View数据结构混乱),完全不符合你的业务需求。
具体设计方案

按照你“提取名词为类”的思路,新增用户-视图权限关联类(比如命名为UserViewPermission),专门维护三者的关联关系:

  • 属性包含:关联的User实例、关联的View实例、权限等级(建议用枚举类型,比如READ_ONLY/EDIT/FULL_CONTROL)
  • 方法可包含:getPermissionLevel()(获取当前用户对该视图的权限)、updatePermissionLevel()(修改权限)等,所有权限相关操作都归到这个类里
针对OOAD新手的补充建议

在“提取名词为类、动词为方法”的基础上,还要兼顾两个核心设计原则:

  • 精准拆分名词:区分“实体类”(比如User、View,代表独立存在的业务对象)和“关联类”(比如UserViewPermission,代表实体间的关系与规则),不要把关联型概念硬塞给单一实体。
  • 清晰归属动词:比如“修改视图权限”这个动作,应该放在UserViewPermission类或者专门的权限管理服务类中,而不是View或User类,确保每个类的职责边界清晰。

如果后续需要支持角色级权限(比如某个角色下的所有用户对视图有相同权限),可以再扩展新增RoleViewPermission类,或者在权限关联类中支持用户/角色两种关联对象,这样扩展性会更好。

内容的提问来源于stack exchange,提问作者rahul vignesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:35:15