• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * @file Describe the file
3 * Copyright (c) 2023 Huawei Device Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import data_rdb from '@ohos.data.relationalStore';
18import { Constants } from '@ohos/datastructure/src/main/ets/Constants';
19import {
20  CalendarsColumns,
21  DEFAULT_CALENDAR_VALUE
22} from '@ohos/datastructure/src/main/ets/calendars/CalendarsColumns';
23import dataSharePredicates from '@ohos.data.dataSharePredicates';
24import { ValueType } from '@ohos.data.ValuesBucket';
25
26/**
27 * 初始化数据中的 creator。保护 creator 字段无法被应用自定义插入
28 *
29 * @param values 插入的数据
30 * @param creator 调用接口的应用
31 */
32export function initValueCreator(values: data_rdb.ValuesBucket, creator: ValueType) {
33  values[Constants.CREATOR] = creator;
34}
35
36/**
37 * 低级别权限下无法操作其他应用的账户。接口的 predicates 中带上其他应用的信息会冲突,无法进行操作
38 *
39 * @param predicates
40 * @param creator 调用接口的应用
41 */
42export function initPredicateCreator(predicates: dataSharePredicates.DataSharePredicates, creator: ValueType) {
43  predicates.equalTo(Constants.CREATOR, creator);
44}
45
46/**
47 * 低权限只能查找默认账户和自己应用下的账户。接口的 predicates 中带上应用的信息会冲突,无法进行操作
48 *
49 * @param predicates
50 * @param creator 调用接口的应用
51 */
52export function initPredicateDefaultAndOwnCreator(predicates: dataSharePredicates.DataSharePredicates, creator: ValueType) {
53  predicates.beginWrap()
54    .equalTo(Constants.CREATOR, creator)
55    .or()
56    .beginWrap()
57    .equalTo(CalendarsColumns.ACCOUNT_TYPE, DEFAULT_CALENDAR_VALUE.account_type)
58    .and()
59    .equalTo(CalendarsColumns.ACCOUNT_NAME, DEFAULT_CALENDAR_VALUE.account_name)
60    .and()
61    .equalTo(Constants.CREATOR, DEFAULT_CALENDAR_VALUE.creator)
62    .endWrap()
63    .endWrap();
64}
65
66/**
67 * 删除数据中的 creator 字段。保护 creator 字段无法被修改
68 *
69 * @param values 更新的数据
70 */
71export function deleteValueCreator(values: data_rdb.ValuesBucket): data_rdb.ValuesBucket {
72  let valuesResult: data_rdb.ValuesBucket = {};
73  for (let key of Object.keys(values)) {
74    if (key === Constants.CREATOR) {
75      continue;
76    }
77    valuesResult[key] = values[key];
78  }
79  return valuesResult;
80}
81
82/**
83 * 保护默认账户无法被修改和删除。接口的 predicates 中带上默认账户的信息会冲突,无法进行操作
84 *
85 * @param predicates
86 */
87export function initPredicateDefaultCalendarProtect(predicates: dataSharePredicates.DataSharePredicates) {
88  predicates.beginWrap()
89    .notEqualTo(CalendarsColumns.ACCOUNT_TYPE, DEFAULT_CALENDAR_VALUE.account_type)
90    .and()
91    .notEqualTo(CalendarsColumns.ACCOUNT_NAME, DEFAULT_CALENDAR_VALUE.account_name)
92    .and()
93    .notEqualTo(Constants.CREATOR, DEFAULT_CALENDAR_VALUE.creator)
94    .endWrap();
95}