鸿蒙 系统-安全-程序访问控制-应用权限管控

Ability Kit 提供了一种允许应用访问系统资源(如:通讯录等)和系统能力(如:访问摄像头、麦克风等)的通用权限访问方式,来保护系统数据(包括用户个人数据)或功能,避免它们被不当或恶意使用。

应用权限保护的对象可以分为数据和功能:

  • 数据 包括个人数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)。
  • 功能 包括设备功能(如访问摄像头/麦克风、打电话、联网等)、应用功能(如弹出悬浮窗、创建快捷方式等)。

系统采用 TokenID 作为应用的唯一标识。权限管理服务通过应用的 TokenID 来管理应用的 AT(Access Token)信息,包括应用身份标识 APP ID、子用户 ID、应用分身索引信息、应用 APL、应用权限授权状态等。在资源使用时,系统将通过 TokenID 作为唯一身份标识映射获取对应应用的权限授权状态信息,并依此进行鉴权,从而管控应用的资源访问行为。
系统支持多用户特性和应用分身特性,同一个应用在不同的子用户下和不同的应用分身下会有各自的 AT,这些 AT 的 TokenID 也是不同的。


授权方式

  • system_grant(系统授权)
    在该类型的权限许可下,应用被允许访问的数据不会涉及到用户或设备的敏感信息,应用被允许执行的操作对系统或者其他应用产生的影响可控。
    如果在应用中申请了 system_grant 权限,那么系统会在用户安装应用时,自动把相应权限授予给应用。配置文件(module.json5)申请权限

  • user_grant(用户授权)
    在该类型的权限许可下,应用被允许访问的数据将会涉及到用户或设备的敏感信息,应用被允许执行的操作可能对系统或者其他应用产生严重的影响。
    该类型权限不仅需要在安装包中申请权限,还需要在应用动态运行时,通过发送弹窗的方式请求用户授权。在用户手动允许授权后,应用才会真正获取相应权限,从而成功访问操作目标对象。配置文件申请权限 + 运行时弹窗请求授权

常见权限

常见 系统授权 权限

权限描述
ohos.permission.INTERNET允许使用网络资源
ohos.permission.KEEP_BACKGROUND_RUNNING允许 Ability 在后台持续运行
ohos.permission.USE_BLUETOOTH允许应用查看蓝牙的配置
ohos.permission.PRINT允许应用获取打印框架的能力
ohos.permission.ACCELEROMETER允许应用读取加速度传感器的数据
ohos.permission.VIBRATE允许应用控制马达振动

常见 用户授权 权限

权限描述
ohos.permission.APP_TRACKING_CONSENT允许应用读取开放匿名设备标识符
ohos.permission.CAMERA允许应用使用相机
ohos.permission.DISTRIBUTED_DATASYNC允许不同设备间的数据交换
ohos.permission.APPROXIMATELY_LOCATION允许应用获取设备模糊位置信息
ohos.permission.LOCATION允许应用获取设备位置信息
ohos.permission.WRITE_MEDIA允许应用读写用户外部存储中的媒体文件信息

配置文件授权

用在申请权限时,需要在项目的配置文件(module.json5)中,逐个声明需要的权限,否则应用将无法获取授权:

{"module": {"requestPermissions": [{"name": "ohos.permission.PERMISSION_NAME", //所有权限都必须声明权限名称"reason": "$string:reason", //申请原因,user_grant 权限必需"usedScene": {//使用场景,user_grant 权限必需"abilities": ["EntryAbility"], //哪些UIAbility中使用"when": "inuse" //何时使用}}]}
}

向用户申请授权

当应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权,这部分权限是 user_grant 权限。

当应用申请 user_grant 权限时,需要完成以下步骤:

  • 在配置文件(module.json5)中,声明应用需要请求的权限。
  • 将应用中需要申请权限的目标对象与对应目标权限进行关联,让用户明确地知道,哪些操作需要用户向应用授予指定的权限。
  • 运行应用时,在用户触发访问操作目标对象时应该调用接口,精准触发动态授权弹框。该接口的内部会检查当前用户是否已经授权应用所需的权限,如果当前用户尚未授予应用所需的权限,该接口会拉起动态授权弹框,向用户请求授权。
  • 检查用户的授权结果,确认用户已授权才可以进行下一步操作。

每次执行需要目标权限的操作时,应用都必须使用 checkAccessToken()函数检查自己是否已经具有该权限
每次访问受目标权限保护的接口之前,都需要使用 requestPermissionsFromUser()接口请求相应的权限

// 下面的代码可以运行在 Ability 启动时,或者某个 UI页面 启动时
import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit'async checkPermissions() {let permissions: Permissions[] = ["ohos.permission.CAMERA"]let accessMgr = abilityAccessCtrl.createAtManager()const flags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;const bundleInfo = await bundleManager.getBundleInfoForSelf(flags)const grantStatus =await accessMgr.checkAccessToken(bundleInfo.appInfo.accessTokenId, permissions[0])if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {let results = await accessMgr.requestPermissionsFromUser(getContext(), permissions)if (results.authResults[0] == 0) {// 用户通过授权} else {// 用户拒绝授权}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法-数对的使用

1、数对可用于数组排序中&#xff0c;并且可记忆化排序前的元素下标 #include<iostream> #include<string> #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 2e5 10; pair<int, int> a[N]; void solve() {ll n;cin …

Linux基础第四天

系统之间文件共享 想要实现两个不同的系统之间实现文件共享&#xff0c;最简单的一种方案就是设置VMware软件的共享文件夹&#xff0c;利用共享文件夹可以实现linux系统和windows系统之间的文件共享&#xff0c;这样就可以实现在windows系统上编辑程序&#xff0c;然后在linux系…

Docker 核心原理详解:Namespaces 与 Cgroups 如何实现资源隔离与限制

#Docker疑难杂症解决指南# Docker 作为容器化技术的代名词,彻底改变了软件的开发、部署和管理方式。它凭借其轻量、快速、一致性强的特性,成为了现代云原生架构的基石。然而,Docker 容器的神奇之处并非“无中生有”,其背后是 Linux 内核的两大核心技术——Namespaces(命名…

GitHub 趋势日报 (2025年05月14日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1xming521/WeClone&#x1f680;从聊天记录创造数字分身的一站式解决方案&…

【Go】从0开始学习Go

文章目录 从0开始学习Go0 与C对比1 代码框架1.1 helloworld式代码示例1.2 主体代码元素&#xff08;核心三部分&#xff09;1.3 其他 2 与C/C区别3 有用的小工具4 注意事项 从0开始学习Go 0 与C对比 特性CGo编译型语言需要编译为机器码直接编译为二进制可执行文件静态类型类型…

简单说一下 Webpack分包

最近在看有关webpack分包的知识&#xff0c;搜索了很多资料&#xff0c;感觉这一块很是迷惑&#xff0c;网上的资料讲的也迷迷糊糊&#xff0c;这里简单总结分享一下&#xff0c;也当个笔记。 如有错误请指出。 为什么需要分包 我们知道&#xff0c;webpack的作用&#xff0c…

使用Python和FastAPI构建网站爬虫:Oncolo医疗文章抓取实战

使用Python和FastAPI构建网站爬虫&#xff1a;Oncolo医疗文章抓取实战 前言项目概述技术栈代码分析1. 导入必要的库2. 初始化FastAPI应用3. 定义请求模型4. 核心爬虫功能4.1 URL验证和准备4.2 设置HTTP请求4.3 发送请求和解析HTML4.4 提取文章内容4.5 保存结果和返回数据 5. AP…

YoloV8改进策略:卷积篇|风车卷积|即插即用

文章目录 论文信息论文翻译摘要引言相关研究红外搜索与跟踪检测和分割网络红外搜索与跟踪数据集的损失函数红外搜索与跟踪数据集方法风车形卷积(PConv)基于尺度的动态损失SIRST - UAVB数据集实验实验设置与其他方法的比较多模型上的消融实验结论致谢代码改进方法测试结果总结…

【NLP】36. 从指令微调到人类偏好:构建更有用的大语言模型

从指令微调到人类偏好&#xff1a;构建更有用的大语言模型 大语言模型&#xff08;LLMs&#xff09;已经成为现代自然语言处理系统的核心&#xff0c;但单纯依赖传统语言建模目标&#xff0c;往往难以满足实际应用的“人类意图”。从 Instruction Tuning&#xff08;指令微调&…

基于Transformers与深度学习的微博评论情感分析及AI自动回复系统

前言 这个项目存在cookie没有自动更新问题&#xff0c;后续可能会发出来解决教程&#xff0c;还有微博网页版的话最多看到300条评论&#xff0c;而且回复别人信息的话最多回复15条就要休息5分钟左右才能评论 1. 项目概述 本项目实现了一个微博评论自动化处理系统&#xff0c…

详解 Zephyr RTOS:架构、功能与开发指南

目录 Zephyr RTOS 的核心特性 1. 轻量级和可扩展性 2. 实时性能 3. 多平台支持 4. 安全性 5. 社区和生态系统 Zephyr 的架构 1. 内核 2. 驱动模型 3. 网络栈 4. 文件系统 开发环境和工具链 安装和配置 开发流程 1. 应用程序开发 2. 调试和测试 3. 部署 实际应…

人工智能重塑医疗健康:从辅助诊断到个性化治疗的全方位变革

人工智能正在以前所未有的速度改变着医疗健康领域&#xff0c;从影像诊断到药物研发&#xff0c;从医院管理到远程医疗&#xff0c;AI 技术已渗透到医疗服务的各个环节。本文将深入探讨人工智能如何赋能医疗健康产业&#xff0c;分析其在医学影像、临床决策、药物研发、个性化医…

Linux笔记---内核态与用户态

用户态&#xff08;User Mode&#xff09; 权限级别&#xff1a;较低&#xff0c;限制应用程序直接访问硬件或关键系统资源。 适用场景&#xff1a;普通应用程序的运行环境。 限制&#xff1a;无法执行特权指令&#xff08;如操作I/O端口、修改内存管理单元配置等&#xff09…

Spring 代理与 Redis 分布式锁冲突:一次锁释放异常的分析与解决

Spring 代理与 Redis 分布式锁冲突&#xff1a;一次锁释放异常的分析与解决 Spring 代理与 Redis 分布式锁冲突&#xff1a;一次锁释放异常的分析与解决1. 问题现象与初步分析2 . 原因探究&#xff1a;代理机制对分布式锁生命周期的干扰3. 问题复现伪代码4. 解决方案&#xff1…

SQL:多列匹配(Multiple-column Matching)

目录 基础概念 应用场景详解 1. 多列等值匹配 2. 多列 IN 匹配&#xff08;集合匹配&#xff09; 3. 多列 JOIN 匹配&#xff08;复合键连接&#xff09; 4. 多列匹配 子查询 5. 多列匹配 EXISTS 6. 多列匹配 UNION&#xff08;组合数据源&#xff09; 7. 多列匹配…

基于DeepSeek的智能客服系统实践与创新

引言:AI大模型重塑客户服务新范式 近年来,AI大模型技术的突破性进展正在深刻改变传统客户服务模式。作为国内领先的AI企业,DeepSeek凭借其创新的算法架构(如MoE混合专家模型、动态学习率调度器)和极致的成本效益(仅为同类模型成本的1/20),在自然语言理解、情感分析、多…

SGLang和vllm比有什么优势?

环境&#xff1a; SGLang vllm 问题描述&#xff1a; SGLang和vllm比有什么优势&#xff1f; 解决方案&#xff1a; SGLang和vLLM都是在大语言模型&#xff08;LLM&#xff09;推理和部署领域的开源项目或框架&#xff0c;它们各自有不同的设计目标和优势。下面我综合目前…

三、Hive DDL数据库操作

在 Apache Hive 中&#xff0c;数据库 (Database)&#xff0c;有时也被称为模式 (Schema)&#xff0c;是组织和管理 表及其他对象的基本命名空间单元。熟练掌握数据库层面的数据定义语言 (DDL) 操作&#xff0c;是构建清晰、有序的 Hive 数据仓库的第一步。本篇笔记将详细梳理 …

Redis(2):Redis + Lua为什么可以实现原子性

Redis 作为一款高性能的键值对存储数据库&#xff0c;与 Lua 脚本相结合&#xff0c;为实现原子性操作提供了强大的解决方案&#xff0c;本文将深入探讨 Redis Lua 实现原子性的相关知识 原子性概念的厘清 在探讨 Redis Lua 的原子性之前&#xff0c;我们需要明确原子性的概念…

科普:极简的AI乱战江湖

本文无图。 大模型 ‌2022年2月&#xff0c;‌文生图应用的鼻祖Midjourney上线。 ‌2022年8月&#xff0c;‌开源版的Midjourney&#xff0c;也就是Stable Diffusion上线。 2022年11月30日‌&#xff0c;OpenAI正式发布ChatGPT-3.5。 此后&#xff0c;不断有【大模型】面世&…