HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第62天,访问及DataAbility权限控制。

发布于 1周前 作者 itying888 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第62天,访问及DataAbility权限控制。 1、访问DataAbility

访问DataAbility需导入基础依赖包,以及获取与DataAbility子模块通信的URI字符串。

其中,基础依赖包包括:

访问DataAbility的示例代码如下:

// 作为参数传递的URI,与config中定义的URI的区别是多了一个"/",有三个"/"
import featureAbility from '[@ohos](/user/ohos).ability.featureAbility'
import ohos_data_ability from '[@ohos](/user/ohos).data.dataAbility'
import ohos_data_rdb from '[@ohos](/user/ohos).data.rdb'

let urivar = "dataability:///com.ix.DataAbility"
let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
  1. 构建数据库相关的RDB数据。
let valuesBucket = {"name": "gaolu"}
let da = new ohos_data_ability.DataAbilityPredicates()
let valArray =new Array("value1");
let cars = new Array({"batchInsert1" : "value1",});

注:关于DataAbilityPredicates的详细内容,请参考DataAbility谓词

调用insert方法向指定的DataAbility子模块插入数据。

// callback方式调用:
DAHelper.insert(
  urivar,
  valuesBucket,
  (error, data) => {
    console.info("DAHelper insert result: " + data)
  }
);

// promise方式调用(await需要在async方法中使用):
let datainsert = await DAHelper.insert(urivar, valuesBucket).then((data) => {
  console.info("insert success.");
}).catch((error) => {
  console.error("insert failed.");
});

调用delete方法删除DataAbility子模块中指定的数据。

// callback方式调用:
DAHelper.delete(
  urivar,
  da,
  (error, data) => {
    console.info("DAHelper delete result: " + data)
  }
);

// promise方式调用(await需要在async方法中使用):
let datadelete = await DAHelper.delete(
  urivar,
  da,
);

调用update方法更新指定DataAbility子模块中的数据。

// callback方式调用:
DAHelper.update(
  urivar,
  valuesBucket,
  da,
  (error, data) => {
    console.info("DAHelper update result: " + data)
  }
);

// promise方式调用(await需要在async方法中使用):
let dataupdate = await DAHelper.update(
  urivar,
  valuesBucket,
  da,
);

调用query方法在指定的DataAbility子模块中查找数据。

// callback方式调用:
DAHelper.query(
  urivar,
  valArray,
  da,
  (error, data) => {
    console.info("DAHelper query result: " + data)
  }
);

// promise方式调用(await需要在async方法中使用):
let dataquery = await DAHelper.query(
  urivar,
  valArray,
  da
);

调用batchInsert方法向指定的DataAbility子模块批量插入数据。

// callback方式调用:
DAHelper.batchInsert(
  urivar,
  cars,
  (error, data) => {
    console.info("DAHelper batchInsert result: " + data)
  }
);

// promise方式调用(await需要在async方法中使用):
let databatchInsert = await DAHelper.batchInsert(
  urivar,
  cars
);

调用executeBatch方法向指定的DataAbility子模块进行数据的批量处理。

// callback方式调用:
DAHelper.executeBatch(
  urivar,
  [
    {
      uri: urivar,
      type: featureAbility.DataAbilityOperationType.TYPE_INSERT,
      valuesBucket: {"executeBatch" : "value1",},
      predicates: da,
      expectedCount:0,
      predicatesBackReferences: null,
      interrupted:true,
    }
  ],
  (error, data) => {
    console.info("DAHelper executeBatch result: " + data)
  }
);

// promise方式调用(await需要在async方法中使用):
let dataexecuteBatch = await DAHelper.executeBatch(
  urivar,
  [
    {
      uri: urivar,
      type: featureAbility.DataAbilityOperationType.TYPE_INSERT,
      valuesBucket:
      {
        "executeBatch" : "value1",
      },
      predicates: da,
      expectedCount:0,
      predicatesBackReferences: null,
      interrupted:true,
    }
  ]
);

DataAbility的客户端的接口是由工具接口类对象DataAbilityHelper向外提供,相关接口可参考DataAbilityHelper模块

2、DataAbility权限控制

DataAbility提供数据服务,并不是所有的Ability都有权限读写它,DataAbility有一套权限控制机制来保证数据安全。分为静态权限控制和动态权限控制两部分。

2.1、静态权限控制

DataAbility作为服务端,在被拉起的时候,会根据config.json里面配置的权限来进行校验,有"readPermission"、"writePermission"和"Permission"三个配置项,

可以不配或者为空。示例如下:

"abilities": [{
  "srcPath": "DataAbility",
  "name": ".DataAbility",
  "icon": "$media:icon",
  "srcLanguage": "ets",
  "description": "$string:description_dataability",
  "type": "data",
  "visible": true,
  "uri": "dataability://ohos.samples.etsdataability.DataAbility",
  "readPermission":"ohos.permission.READ_CONTACTS",
  "writePermission":"ohos.permission.WRITE_CONTACTS"
}]

客户端在拉起DataAbility的时候,需要校验客户端是否有权限拉起该DataAbility。客户端的权限配置在config.json配置文件的"module"对象的"reqPermissions"对象中,示例如下:

{
  "module": {
    "reqPermissions":[
      {
        "name": "ohos.permission.READ_CONTACTS"
      },
      {
        "name": "ohos.permission.WRITE_CONTACTS"
      }
    ]
  }
}

2.1、动态权限控制

静态权限校验只能控制某个DataAbility是否能被另一个Ability或应用拉起,无法精确校验每个读写接口的权限,因为拉起DataAbility的时候,还不知道应用是否需要读写它的数据。

动态权限控制是校验每个数据操作的接口是否有对应的权限。客户端调用数据操作接口所需的权限如下表所示。

需要配置读权限的接口 需要配置写权限的接口 据实际操作配置读写权限的接口
query、normalizeUri、denormalizeUri、openfile(传入mode有’r’) insert、batchInsert、delete、update、openfile(传入mode有’w’) executeBatch

对于需要配置读权限的接口,服务端需要配置readPermission,客户端必须申请相应的读权限才能调用相关的接口。

对于需要配置写权限的接口,服务端需要配置writePermission,客户端必须申请相应的写权限才能调用相关的接口。


更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第62天,访问及DataAbility权限控制。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,ArkTS语言用于开发应用程序。第62天的教程主要涉及访问及DataAbility权限控制。DataAbility是鸿蒙系统中用于数据访问的组件,允许应用程序通过统一的接口访问不同类型的数据源。

在鸿蒙系统中,权限控制是确保应用程序安全访问数据的关键机制。通过权限控制,可以限制应用程序对敏感数据的访问,防止未经授权的操作。在ArkTS中,权限控制主要通过配置文件(config.json)和代码中的权限声明来实现。

config.json文件中,开发者需要声明应用程序所需的权限。例如,如果应用程序需要访问某个DataAbility,则需要在配置文件中添加相应的权限声明。权限声明通常包括权限名称和权限级别,确保应用程序在运行时能够正确获取所需的权限。

在代码中,开发者可以通过调用系统API来检查和管理权限。例如,使用abilityAccessCtrl模块中的requestPermissionsFromUser方法,可以动态请求用户授权。此外,开发者还可以通过checkAccessToken方法检查当前应用程序是否具有所需的权限。

在DataAbility的访问控制中,开发者可以通过实现DataAbilityHelper类来管理数据访问。通过设置访问权限,可以控制哪些应用程序或用户能够读取或写入数据。权限控制可以在DataAbility的onCreate方法中进行初始化,并在数据操作时进行验证。

总之,鸿蒙Next中的ArkTS语言通过配置文件和代码中的权限声明,结合系统API和DataAbility的访问控制机制,实现了对数据访问的精细化管理,确保应用程序在访问数据时的安全性和合规性。

更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第62天,访问及DataAbility权限控制。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,ArkTS语言通过DataAbility实现数据访问与权限控制。DataAbility是鸿蒙系统提供的一种数据共享机制,允许应用间安全地共享数据。要访问DataAbility,首先需在config.json中声明所需权限,如ohos.permission.READ_USER_STORAGE。然后,通过DataAbilityHelper类进行数据操作,如查询、插入、更新等。权限控制通过requestPermissionsFromUser方法动态申请,确保数据访问的安全性。开发者应遵循最小权限原则,仅申请必要的权限,以保护用户隐私。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!