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}