美文网首页
鸿蒙开发:权限管理之授权方式

鸿蒙开发:权限管理之授权方式

作者: 程序员一鸣 | 来源:发表于2025-03-15 19:20 被阅读0次

前言

本文基于Api13。

在之前的文章中,关于权限管理进行了简单的概述,也了解了如何去声明权限,其实关于权限管理,还有一个知识点需要掌握,那就是权限的授权方式。

我们知道权限管理的核心机制是保障用户隐私和数据安全,鸿蒙当中,根据授权方式的不同,分为了 system_grant(系统授权) 和 user_grant(用户授权) 两种模式,在实际的开发中,我们应当根据权限的敏感性和使用场景选择合适的授权方式。

基本概念

system_grant(系统授权)

系统授权权限在应用安装时由系统自动授予,无需用户手动操作,其特点就是低敏感性,通常涉及对用户隐私或设备安全影响较小的权限,如网络访问、后台运行等;还有一个特点就是静默授予,对于用户来说是无感知的,开发者也无需额外处理授权逻辑。

示例权限

ohos.permission.INTERNET(网络访问)
ohos.permission.KEEP_BACKGROUND_RUNNING(保持后台运行)

user_grant(用户授权)

用户授权权限需在应用运行时通过弹窗请求用户手动授权,用户可选择允许或拒绝,其主要特点是,高敏感性,比如涉及用户隐私或设备敏感功能,如位置、摄像头、麦克风等,还有一个特点就是,显式交互,也就是必须通过系统弹窗获取用户同意,用户可随时在设置中撤销授权;最后一个特点就是,必须动态申请,需在代码中调用 API 触发授权请求,并处理授权结果。

示例权限

ohos.permission.LOCATION(获取位置)
ohos.permission.CAMERA(访问摄像头)

主要区别

维度 system_grant user_grant
授权时机 安装时自动授予 运行时动态申请
用户感知 无感知 需主动确认弹窗
权限敏感度
使用场景 基础功能所需权限 敏感功能所需权限
代码处理 无需运行时逻辑 需调用 API 并处理结果
撤销方式 用户需卸载应用 用户可在设置中随时关闭

选择策略

判断权限敏感度

优先选择 system_grant:若权限不涉及用户隐私如网络请求、读取设备型号,直接声明为系统授权。

必须使用 user_grant:若权限可能泄露用户数据如通讯录、位置、摄像头等,必须动态申请用户授权。

遵循最小权限原则

仅申请必要权限:避免过度申请权限,如天气应用无需麦克风权限。

分阶段申请:在用户触发敏感操作时再申请对应权限,如扫码时再请求摄像头权限。

代码实现规范

声明权限:在module.json5文件中声明所需权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.MICROPHONE",
        "reason": "$string:reason",
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "always"
        }
      }
    ]
  }
}

动态申请 user_grant 权限

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

// 检查权限状态
    let atManager = abilityAccessCtrl.createAtManager()
    let permissions: Permissions[] = ['ohos.permission.CAMERA']

    atManager.requestPermissionsFromUser(this.context, permissions, (err, data) => {
      if (err) {
        console.error('请求权限失败');
      } else if (data.authResults[0] === 0) {
        console.info('用户已授权');
      } else {
        // 处理用户拒绝场景
      }
    });

用户体验优化

解释权限用途:在申请权限前,通过弹窗或界面提示说明权限的必要性,如需要访问位置以提供附近服务。

兼容拒绝场景:若用户拒绝授权,应提供降级功能(如手动输入地址代替自动定位)。

相关总结

在实际的应用开发中,合理选择 system_grant和user_grant是平衡功能实现与用户隐私的关键,system_grant 适用于基础功能,简化开发流程;user_grant 用于敏感操作,需重视用户体验和隐私合规。

还有一点,在权限管理的时候,应当严格遵循最小权限原则,结合动态申请和清晰的用户引导,既保障功能完整性,又避免给用户带来不好体验。

切记,权限在使用的时候才去申请,不要提前申请,还有在项目中禁止滥用权限,否则可能会导致应用下架。

相关文章

  • Linux基础-权限管理

    Linux基础-权限管理 一.权限管理 1.用户权限: 认证:1.1 Authentication;授权:Auth...

  • mysql(四)

    mysql的权限管理 如何给开发授权 开发人员说请给我开一个用户? grant select on 业务库.表名 ...

  • Mongodb创建用户以及相关语法

    为数据库创建用户权限 打开admin 创建管理员身份 创建shopingmall数据库的访问权限 以授权的方式启动...

  • 数据库之安全机制

    用户管理 权限管理 查看授权信息 关于权限 关于用户IP mysql client 10.0.122.10 my...

  • Oracle | 用户、权限、角色管理操作

    一、用户管理 1、创建用户 2、修改用户 3、删除用户 二、权限管理 1、系统权限 - 授权操作 2、对象权限 -...

  • [Android]USB开发

    声明:主要参照文档:Android开发之USB数据通信安卓USB通信之权限管理 第一:请求权限和请求权限回调(通过...

  • Oracle用户权限,角色操作命令

    一、创建用户以及授权管理权限 二、查询普通用户拥有那些权限 三、系统权限的传递 四、系统权限回收 五、普通用户授权...

  • shiro

    一:基础概念 什么是权限管理 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经...

  • 权限控制_shiro_授权流程

    Shiro Authorization ( 授权) 官方授权图片 步骤: 授权成功后 关于权限使用有三种方式 1、...

  • iOS APP上线发布流程规范

    appstore 账号管理 iOS开发者账号管理级别权限: Admin Legal权限:超级管理员。可以管理开发者...

网友评论

      本文标题:鸿蒙开发:权限管理之授权方式

      本文链接:https://www.haomeiwen.com/subject/rrjimjtx.html