访问DataAbility
访问DataAbility需导入基础依赖包,以及获取与DataAbility子模块通信的URI字符串。
其中,基础依赖包包括:
- @ohos.ability.featureAbility
- @ohos.data.dataAbility
- @ohos.data.rdb
访问DataAbility的示例代码如下:
-
创建工具接口类对象。
// 作为参数传递的URI,与config中定义的URI的区别是多了一个"/",有三个"/" import featureAbility from '@ohos.ability.featureAbility' import ohos_data_ability from '@ohos.data.dataAbility' import ohos_data_rdb from '@ohos.data.rdb' let urivar = "dataability:///com.ix.DataAbility" let DAHelper = featureAbility.acquireDataAbilityHelper(urivar);
-
构建数据库相关的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 dataupdate = await DAHelper.update( urivar, valuesBucket, da, );
-
调用batchInsert方法向指定的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 );
-
调用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模块。
DataAbility权限控制
DataAbility提供数据服务,并不是所有的Ability都有权限读写它,DataAbility有一套权限控制机制来保证数据安全。分为静态权限控制和动态权限控制两部分。
静态权限控制
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"
}
}
}
}
动态权限控制
静态权限校验只能控制某个DataAbility是否能被另一个Ability或应用拉起,无法精确校验每个读写接口的权限,因为拉起DataAbility的时候,还不知道应用是否需要读写它的数据。
动态权限控制是校验每个数据操作的接口是否有对应的权限。客户端调用数据操作接口所需的权限如下表所示。
表1 接口对应的读写权限配置
需要配置读权限的接口 | 需要配置写权限的接口 | 据实际操作配置读写权限的接口 |
---|---|---|
query、normalizeUri、denormalizeUri、openfile(传入mode有’r’) | insert、batchInsert、delete、update、openfile(传入mode有’w’) | executeBatch |
对于需要配置读权限的接口,服务端需要配置readPermission,客户端必须申请相应的读权限才能调用相关的接口。
对于需要配置写权限的接口,服务端需要配置writePermission,客户端必须申请相应的写权限才能调用相关的接口。
原文地址:https://blog.csdn.net/qq_46189388/article/details/135771607
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_61889.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!