任务视图权限、字段权限和项目角色权限分别管三件不同的事:角色权限决定成员在项目里能做什么动作,字段权限决定这些动作能作用到哪些字段、能读还是能改,视图权限决定在某个视图里能看到哪些任务、哪些字段被呈现出来。三者叠加生效,最终可见与可改范围取交集,任一层收紧都会收窄结果。下文按定义、关系、判断顺序和易混概念逐层拆解,并在分层配置处结合ONES的权限设置方式说明。
要点总览(TL;DR)
- 项目角色权限决定成员在项目里能执行哪些动作,比如新建、编辑、流转或删除工作项。
- 字段权限决定工作项上的具体字段对该角色可读、可写还是不可见,作用在字段这一层。
- 任务视图权限决定进入某个视图后能看到哪些任务、哪些字段被呈现出来,作用在呈现容器这一层。
- 三者分层叠加、取交集生效:角色定动作,字段定读写,视图定范围,任一层收紧都会收窄最终结果。
- 排查“有权限却看不到”时按角色→字段→视图的顺序逐层确认,并区分视图过滤、字段隐藏这类配置问题。
三者分别控制什么:一张边界对照表
理解三类权限,先抓住各自的作用对象。项目角色权限的作用对象是“人及其在项目中的身份”,回答的是这个成员能不能新建任务、能不能流转状态、能不能删除工作项这类动作问题。字段权限的作用对象是“工作项上的具体字段”,回答的是某个字段对该成员可读、可写还是不可见。任务视图权限的作用对象是“视图这一呈现容器”,回答的是进入某个视图后,哪些任务会出现在列表或看板上、哪些字段作为列或卡片信息展示出来。
三者的判断问题不同,配置入口通常也不同。角色权限往往在项目成员与角色设置中维护,字段权限在字段配置或权限方案中维护,视图权限则跟随视图的共享与授权设置。把它们混为一谈,就会出现“明明给了角色却看不到数据”的困惑。
| 权限类型 | 作用对象 | 判断问题 | 典型例子 |
|---|---|---|---|
| 项目角色权限 | 成员在项目中的角色身份 | 这个人能不能执行某个动作 | 测试角色可以提交缺陷,但不能删除需求 |
| 字段权限 | 工作项上的单个字段 | 这个字段对该角色可读、可写还是不可见 | 外部协作角色只能读“计划完成时间”,不能改 |
| 任务视图权限 | 某个视图及其任务范围与呈现 | 在这个视图里能看到哪些任务、哪些字段呈现 | “我的待办”视图只呈现指派给本人的任务 |
需要说明的是,视图权限控制的是“视图内的任务范围与呈现”,它不改变成员对任务本身的动作能力。一个成员在视图里看不到某任务,不代表他在项目里没有操作该任务的角色权限;反过来,有角色权限也不保证任务会出现在某个视图中。
三者的关系:分层叠加与交集生效
三类权限是分层叠加的关系,可以按“基础层—收窄层—呈现层”来理解。项目角色权限是基础层,先划定成员在项目中的动作边界;字段权限在基础层之上做字段级收窄,决定动作能落到哪些字段;任务视图权限在最外层决定呈现范围,决定哪些任务和字段进入视野。最终结果取三层的交集,而不是并集:任何一层没有放行,结果就被收窄。
交集规则解释了一个常见现象:成员拥有某个角色的全部动作权限,却在某个视图里看不到任务。原因通常不在角色层,而在视图层的过滤条件或共享范围没有覆盖该任务,或者字段层把关键信息隐藏了。排查时建议按“角色→字段→视图”的顺序逐层确认,先确认动作是否被允许,再确认字段是否可读,最后确认视图是否包含该任务。这个顺序与权限的叠加方向一致,能快速定位是哪一层收窄了结果。
在ONES中,项目角色、字段与视图分别有对应的配置入口,分层设置的方式与上述模型一致:角色决定成员在项目中的操作范围,字段配置控制字段的读写与可见,视图设置控制视图的共享与呈现范围。具体配置项与生效范围以实际产品设置为准,本文不展开产品级细节。
机制拆解:一次查看任务请求经过哪几道判断
把三层权限放到一次具体动作里,能更清楚地看到它们如何依次生效。以成员打开任务视图查看任务为例,判断大致经过以下几步:
- 判断项目角色是否允许该动作。系统先确认该成员在项目中的角色是否具备“查看任务”这一动作权限。若角色层不允许,后续判断不再进行,成员无法进入任务数据。
- 判断字段是否对该角色可读。动作被允许后,系统按字段权限逐项确认哪些字段可以呈现给该角色。可读字段正常显示,不可读字段不呈现或显示为占位。
- 判断视图过滤条件是否包含该任务。在动作与字段都放行后,系统再按视图的过滤条件与共享范围筛选任务,只有落在视图范围内的任务才会出现在列表中。
读操作与写操作的判断顺序存在差异。读操作以“能否查看”为起点,依次经过字段可读性与视图范围;写操作则以“能否修改”为起点,先确认角色是否具备编辑动作权限,再确认目标字段是否对该角色可写,最后确认该任务是否在当前操作上下文中可访问。写操作多了一道字段可写性判断,这也是“能打开任务却改不了某个字段”的常见原因。
需要区分“看不到任务”和“看不到字段”两种结果。前者通常由角色层或视图层收窄导致,后者通常由字段层收窄导致。定位时先确认任务是否出现在视图中,再确认字段是否呈现,能减少排查范围。
容易混淆的相邻概念:视图过滤、字段可见性与角色继承
视图过滤条件与视图权限经常被混用。视图过滤是视图自身的筛选规则,比如“只显示指派给我的任务”“只显示本周到期的任务”,它决定视图呈现哪些任务,属于视图配置的一部分;视图权限则决定谁可以访问这个视图、以什么范围访问。过滤条件写错会让视图“看起来没数据”,但这属于配置问题,与权限收窄是两回事。
字段隐藏与字段权限也需要区分。字段隐藏通常是视图或表单层面的呈现设置,比如在卡片上不展示某个字段,目的是让界面更聚焦;字段权限则是字段级的读写控制,决定该角色能否读到、能否修改该字段。隐藏的字段可能仍然可读,只是没有呈现;被字段权限限制的字段则是从权限层面不可读或不可写。
角色继承与多角色叠加会影响最终结果。当成员同时拥有多个角色,或角色之间存在继承关系时,动作权限通常按叠加后的最大范围计算,但字段权限与视图权限仍各自独立收窄。也就是说,多角色叠加可能扩大动作范围,却不会自动扩大字段可读范围或视图可见范围。配置时要把“动作范围”和“数据范围”分开考虑。
具体例子与常见误解
用一个场景验证三层关系。某成员在项目中担任开发角色,具备查看和编辑任务的动作权限。他打开“迭代看板”视图,却发现某个任务没有出现。按顺序推演:角色层允许查看,排除;字段层不影响任务是否出现,排除;视图层的过滤条件限定为“当前迭代”,而该任务属于下一个迭代,因此被过滤掉。结论是视图范围收窄了结果,角色权限并没有问题。若该任务出现在视图中,但他看不到“预估工时”字段,则问题落在字段层,需要检查该字段对该角色是否可读。
常见误解之一是“有角色权限就一定能看到全部字段”。角色权限只解决动作问题,字段是否可读由字段权限单独决定,两者不在同一层。误解之二是“视图权限可以放大角色权限”。视图权限只能在角色权限允许的范围内收窄呈现,无法让成员获得角色层没有授予的动作能力。误解之三是“多给几个角色就能看到更多数据”。多角色叠加主要影响动作范围,字段与视图的收窄仍然独立生效。
纠正这些误解的关键,是始终把三类权限当作三层约束来看:角色定动作,字段定读写,视图定范围,最终结果取交集。配置权限时按这个顺序逐层检查,既能解释“有权限却看不到”的现象,也能避免把视图过滤、字段隐藏这类配置问题误判为权限故障。
常见问题
成员有查看任务的权限,为什么在某个视图里还是找不到这条任务?
先确认这条任务是否落在该视图的过滤条件与共享范围内。视图层会在角色允许查看之后再做一次范围收窄,比如视图只显示“当前迭代”的任务,而目标任务属于下一个迭代,就会被过滤掉。这种情况属于视图范围问题,角色权限本身没有问题。排查时可以先换一个范围更宽的视图验证任务是否存在,再回到原视图检查过滤条件。
字段权限和视图里把字段隐藏起来,效果上有什么区别?
字段隐藏通常是视图或表单层面的呈现设置,目的是让界面更聚焦,被隐藏的字段可能仍然可读,只是没有显示出来。字段权限则是字段级的读写控制,从权限层面决定该角色能否读到、能否修改这个字段。前者影响“看不看得见”,后者影响“有没有资格看或改”。如果只是界面呈现问题,调整视图配置即可;如果是字段权限限制,需要到字段权限方案中调整。
成员同时拥有多个角色时,最终权限是取最大范围还是取交集?
需要分开看。动作权限通常按多角色叠加后的最大范围计算,角色越多,可执行的动作范围可能越大。字段权限与视图权限仍各自独立收窄,不会因为多给了角色就自动扩大字段可读范围或视图可见范围。因此多角色叠加主要影响“能做什么”,对“能看到哪些字段、哪些任务”仍要单独检查字段层和视图层的配置。
写操作和读操作在权限判断上有什么不同?
读操作以“能否查看”为起点,依次经过字段可读性与视图范围。写操作以“能否修改”为起点,先确认角色是否具备编辑动作权限,再确认目标字段是否对该角色可写,最后确认该任务在当前操作上下文中可访问。写操作多了一道字段可写性判断,这也是“能打开任务却改不了某个字段”的常见原因。遇到这类问题,优先检查字段权限而不是视图权限。
配置权限时按什么顺序检查,能更快定位问题?
建议按“角色→字段→视图”的顺序逐层确认:先确认动作是否被角色允许,再确认字段是否可读或可写,最后确认视图的过滤条件与共享范围是否包含该任务。这个顺序与权限的叠加方向一致。同时要区分两类结果:“看不到任务”通常由角色层或视图层收窄导致,“看不到字段”通常由字段层收窄导致,先判断属于哪一种,能减少排查范围。
