已开启
feat(ans): add dev design for notification switch fixed by mdm policy #5008
feat(ans): add dev design for notification switch fixed by mdm policy #5008
已开启
wangsen1994创建于 12 天前
wangsen1994
wangsen1994
12 天前

变更说明

新增 MDM 管控场景下应用通知开关固定(Fixed)能力的开发设计文档。

需求背景

MDM kit 需要支持设置应用通知权限静默授权打开,ANS 需根据 MDM 配置的应用列表强制固定通知开关状态,SystemUI 查询固定列表用于设置页开关屏蔽展示。

设计要点

  • Inner API(EDM 设置入口):SetNotificationSwitchFixedForBundles / GetNotificationSwitchFixedForBundles,纯包名 vector<pair<string, bool>>,全量替换语义(空列表清空策略),设置固定时同步强制生效(静默授权)
  • ArkTS systemapi(SystemUI 查询):getNotificationSwitchFixedBundles(): Promise<Map<string, boolean>>,仅 Promise,@systemapi + ohos.permission.NOTIFICATION_CONTROLLER
  • 新增错误码1600030 - 应用通知开关已被固定,无法修改
  • 存量接口约束:固定后 SetNotificationsEnabledForSpecifiedBundle 返回 1600030;IsNotificationEnabled/发布授权链路/requestEnableNotification 读取固定状态

变更内容

Issue: #4351

likedislike
合并受阻
wangsen1994wangsen1994
12 天前 关联了issue:[feat] MDM 管控场景下应用通知开关固定(Fixed)能力设计
afwk_helper成员
12 天前 评论:

开始进行AI检视!

AI review has been started, please wait...

likedislike
afwk_helper成员
12 天前 评论:
check type result report
start ai_review pass -
likedislike
openharmony_ciopenharmony_ci成员
12 天前 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
12 天前 评论:

感谢提交 Pull Requests !此PR未通过DCO校验。
校验失败可能原因:

1. 未签署“DCO协议”(开发者原创声明协议),在线签署、查看签署状态

2. Commits 中未包含 Signed-off-by信息,参考FAQ处理

修复上述问题后,在PR的评论框输入“check dco” ,单击”评论”,系统将再次进行DCO校验。

当前检测到如下Commits的Signed-off-by邮箱未签署DCO协议:


Thanks for submitting a pull request. This pull request has not passed the DCO check.
Possible causes:

1. You have not signed the Developer Certificate of Origin (DCO). Sign the DCO and check DCO status.

2. The commits do not contain the Signed-off-by information. To resolve this issue, see FAQs.

After resolving the preceding issues, enter check dco in the comment box of this pull request and click Comment. The system will check DCO status again.

The Signed-off-by emails in the following commits have not signed the DCO:

likedislike
openharmony_ciopenharmony_ci成员
12 天前 添加了label:dco检查失败
afwk_helper成员
12 天前 评论:

⚠️ 🤖 AI 代码检视报告 ⚠️

总体评估: NEEDS_ATTENTION

问题统计:

  • 总问题数: 6
  • 严重问题: 0
  • 高危问题: 1

摘要:
本设计文档针对 MDM 管控场景下应用通知开关固定能力进行了基础设计,但在安全权限控制、多用户架构及具体接口约束上存在关键细节缺失,需进一步明确以避免实现阶段的安全漏洞和歧义。

📊 详细报告
查看完整的审查详情,包括具体的问题描述、建议和代码位置:
🔗 查看详细报告


此评论由 OpenHarmony Insight 代码审查系统自动生成

likedislike
afwk_helper成员12 天前进行代码检视1
docs/features/notification-switch-fixed-mdm/feature-dev-design.md
@@ -0,0 +178,4 @@
178+## 7. 待确认事项
179+ 
180+1. `@since` 版本号(暂定 27,需与版本火车对齐)
181+2. inner 设置接口的权限:仅 `NOTIFICATION_CONTROLLER`,还是叠加 EDM 专用校验(如校验调用方是 EDM 进程)
afwk_helper12 天前评论:

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟠 Inner API 缺失 EDM 进程级权限校验设计

位置: L181 | 严重程度: High

❓ 问题描述

在“待确认事项”中,Inner 设置接口的权限被标记为待确认。如果该接口仅校验 NOTIFICATION_CONTROLLER 权限,则任何拥有此权限的系统应用均可修改通知开关固定状态,这绕过了 MDM 管控入口,会导致严重的越权管控漏洞。管控类接口必须严格限制调用源。

💡 修复建议

修改建议:在设计阶段明确该 Inner API 必须校验调用方为 EDM 进程,并叠加 EDM 专用权限,而不能仅凭 NOTIFICATION_CONTROLLER 放行。

181: 2. inner 设置接口的权限:必须校验调用方为 EDM 进程并叠加 EDM 专用校验,不得仅凭 NOTIFICATION_CONTROLLER 放行


likedislike
afwk_helper成员12 天前进行代码检视1
docs/features/notification-switch-fixed-mdm/feature-dev-design.md
@@ -0,0 +132,4 @@
132+| `IsNotificationEnabled` | 返回固定状态(固定开 → true,固定关 → false) |
133+| `GetAllNotificationEnabledBundles` | 包含固定为开的应用 |
134+| `publish` / 发布链路授权检查 | 固定为开 → 视为已授权,可发布;固定为关 → 维持 1600004 |
135+| `requestEnableNotification` | 固定为开的应用直接返回成功,不再拉起授权弹窗 |
afwk_helper12 天前评论:

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟡 未明确固定为关时 requestEnableNotification 的行为

位置: L135 | 严重程度: Medium

❓ 问题描述

对于存量接口的约束,仅说明了固定为开时 requestEnableNotification 的行为,遗漏了固定为关时的行为描述。如果固定为关,应用调用此接口应当直接返回失败,不应拉起弹窗或无响应。行为不明确会导致实现时产生歧义。

💡 修复建议

修改建议:在设计文档中补充固定为关时 requestEnableNotification 的明确行为(如直接返回失败或对应错误码)。

135: | requestEnableNotification | 固定为开的应用直接返回成功,不再拉起授权弹窗;固定为关的应用直接返回失败 |


likedislike
afwk_helper成员12 天前进行代码检视1
docs/features/notification-switch-fixed-mdm/feature-dev-design.md
@@ -0,0 +179,4 @@
179+ 
180+1. `@since` 版本号(暂定 27,需与版本火车对齐)
181+2. inner 设置接口的权限:仅 `NOTIFICATION_CONTROLLER`,还是叠加 EDM 专用校验(如校验调用方是 EDM 进程)
182+3. Slot 级开关(`setNotificationEnableSlot`)是否同样受固定约束(暂定仅应用级)
afwk_helper12 天前评论:

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟡 Slot 级开关不受约束可能导致管控失效

位置: L182 | 严重程度: Medium

❓ 问题描述

如果应用级开关被 MDM 固定为开,但 Slot 级开关仍可被用户或应用关闭,将导致应用实际上无法发布通知,破坏了 MDM “强制授权”的管控意图。这属于策略层级不一致的架构风险。

💡 修复建议

修改建议:在设计文档中明确固定策略对 Slot 级开关的影响,建议固定为开时强制所有 Slot 开关为开且不可关闭,以保障管控策略生效。

182: 3. Slot 级开关(setNotificationEnableSlot)同样受固定约束(固定为开时强制开启,固定为关时强制关闭)


likedislike
afwk_helper成员12 天前进行代码检视1
docs/features/notification-switch-fixed-mdm/feature-dev-design.md
@@ -0,0 +171,4 @@
171+ 
172+## 6. 多用户说明
173+ 
174+策略按包名全局管理(设备级 MDM 策略);服务端读取固定状态时若需区分用户,在服务端内部结合调用上下文 userId 解析,不暴露到接口。
afwk_helper12 天前评论:

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟡 全局包名策略可能导致多用户越权管控

位置: L174 | 严重程度: Medium

❓ 问题描述

设计文档中规定“策略按包名全局管理”。在 OpenHarmony 多用户场景下,不同 userId 可安装相同包名的应用。设备级全局包名管控会导致 A 用户的 MDM 固定策略波及到 B 用户的同名应用,这可能不符合 MDM 针对特定用户管控的预期。

💡 修复建议

修改建议:明确管控策略的生效范围。如果确实为设备级全局生效,需说明副作用;若 MDM 意图仅管控当前用户,建议按 userId + bundleName 维度存储策略。

174: 策略存储建议按 userId + bundleName 维度管理,或明确说明全局策略对所有用户的同名应用均生效的副作用。


likedislike