权限模型基础:权限分类与权限等级

聊到鸿蒙的权限管理,我第一个想跟你说的就是——权限分类权限等级。这两个东西,说白了就是整个安全机制的基石。你如果不理解它们,后面写代码的时候很容易踩坑。

我记得刚接触鸿蒙那会儿,第一反应是:“这玩意儿跟Android的权限有啥区别?” 后来深入一看,嗯,区别还真不小。鸿蒙把权限分成了三大类,每一类的管控逻辑都不一样。

一、权限分类:系统权限、应用权限、自定义权限

鸿蒙把权限分成了三个层次,我习惯叫它们“三层蛋糕”:

分类 说明 典型例子
系统权限 由系统预定义,只授予系统级应用 访问系统设置、修改网络配置
应用权限 普通应用可申请的权限 读取联系人、使用相机
自定义权限 开发者自己定义的权限 保护自己的Activity或Service

系统权限,说白了就是“特权”。只有系统应用才能拿到。我在项目中遇到过有人想通过普通应用去申请系统权限,结果编译直接报错。嗯,这条路走不通的。

应用权限,这是我们平时打交道最多的。比如你的App要拍照、要读位置,都得申请这类权限。鸿蒙对这类权限的管控非常细,后面我们会详细讲。

自定义权限,这个我觉得挺有意思。你想想看,如果你的App里有个敏感功能,不想让别的App随便调用,怎么办?自己定义一个权限,谁想用就得先申请。我曾经在一个企业级项目里用过这个,保护内部接口,效果不错。

核心要点:系统权限是“皇亲国戚”,应用权限是“平民百姓”,自定义权限是“私人保镖”。三者各司其职,别搞混了。

二、权限等级:normal、system_grant、user_grant

权限等级,说白了就是“这个权限有多敏感”。鸿蒙把它分成了三个等级,我一个个说。

1. normal(普通级)

这是最低等级。对用户隐私影响很小,系统直接授权,不需要用户弹窗确认。比如访问网络、设置闹钟这些。

我个人习惯把这类权限叫做“静默权限”。你申请,系统就给你,用户甚至不知道。但要注意,不是所有权限都能做成normal,鸿蒙有严格限制。

2. system_grant(系统授权级)

这个等级稍微高一点。系统会在安装时自动授权,但需要满足一定条件。比如你的App必须声明了某个feature,或者签名匹配。

我在项目中遇到过一个问题:明明在配置里声明了权限,但运行时还是拿不到。后来发现是签名没对上。嗯,system_grant虽然不用弹窗,但系统会偷偷检查你的“身份”。

3. user_grant(用户授权级)

这是最高等级。涉及用户隐私,必须弹窗让用户同意。比如读取联系人、使用麦克风、访问地理位置。

你想想看,如果哪个App能偷偷读你的联系人,那还得了?所以鸿蒙把这类权限卡得死死的。用户不同意,你就拿不到。我曾经见过一个App因为没处理好用户拒绝的情况,直接崩溃了。这属于典型的“没想清楚就写代码”。

等级 授权方式 用户感知 典型场景
normal 自动授权 无感知 访问网络
system_grant 安装时自动授权 无感知 读取设备信息
user_grant 运行时弹窗 有感知 使用相机

避坑指南:我曾经在开发一个地图App时,把定位权限设成了system_grant,结果用户安装后根本拿不到位置。后来才发现,定位权限在鸿蒙里必须是user_grant。所以,不要猜,去查官方文档。每个权限的等级是固定的,你改不了。

三、知识体系结构图

下面这张图,是我自己画的。它把权限分类和权限等级的关系讲得很清楚。你多看几遍,后面学起来会轻松很多。

鸿蒙权限模型知识体系 权限分类 系统权限 应用权限 自定义权限 权限等级 normal(普通级) system_grant(系统授权) user_grant(用户授权) 分类决定“是什么”,等级决定“怎么授权”

这张图你看懂了吗?上面是分类,下面是等级。分类决定了权限的“归属”,等级决定了权限的“授权方式”。两者结合,就构成了鸿蒙权限模型的核心。

四、实战中的选择逻辑

说了这么多理论,咱们来点实际的。你在写代码时,怎么判断该用哪种权限、哪个等级?

我个人习惯按这个顺序来思考:

  1. 先看功能:这个功能是系统级的,还是应用级的?如果是系统级的,直接走系统权限。
  2. 再看敏感度:会不会涉及用户隐私?如果会,必须用user_grant。
  3. 最后看自定义:如果标准权限不够用,再考虑自己定义。

举个例子。你要做一个“一键备份联系人”的功能。联系人数据属于用户隐私,所以权限等级必须是user_grant。权限分类呢?读取联系人属于应用权限,不是系统权限。所以最终方案是:申请应用权限中的“读取联系人”,等级为user_grant。

警告:千万不要把user_grant的权限当成normal来用。我曾经见过有人为了省事,在配置里把权限等级写错了,结果应用在华为应用市场上架时直接被驳回。审核机制很严格,别心存侥幸。

好了,权限分类和权限等级就讲到这里。你记住一句话就行:分类管“归属”,等级管“授权”。后面我们讲权限申请流程的时候,你会更深刻地理解这一点。


公众号:蓝海资料掘金营,微信deep3321