1/* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { Permission } from '../model/definition'; 17import { optionAndState } from '../model/typedef'; 18import { Log } from '../utils/utils'; 19import Constants from '../utils/constant'; 20import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 21 22export class PermissionUtils { 23 /** 24 * 获取权限的弹窗开关状态 25 * @param permission 权限 26 * return 27 */ 28 public static async isPermissionQueryEnabled(permission: Permission): Promise<boolean> { 29 let atManager = abilityAccessCtrl.createAtManager(); 30 try { 31 let result = await atManager.getPermissionRequestToggleStatus(permission); 32 Log.info(`permissionRequestToggleStatus is ${result}.`); 33 return result === abilityAccessCtrl.PermissionRequestToggleStatus.OPEN; 34 } catch (error) { 35 Log.error(`getBundleResourceInfo faild, code: ${error.code}, message: ${error.message}.`); 36 return false; 37 } 38 } 39 40 /** 41 * 授予权限并返回操作结果 42 * @param permission 操作权限 43 * @param flag 授权flag 44 * @param tokenId 应用token 45 * return 46 */ 47 public static async grantPermissionWithResult( 48 permission: Permission, flag: number, tokenId: number 49 ): Promise<optionAndState> { 50 try { 51 let atManager = abilityAccessCtrl.createAtManager(); 52 await atManager.grantUserGrantedPermission(tokenId, permission, flag); 53 Log.info(`grant permission success, permission: ${permission}.`); 54 return { 55 operationResult: Constants.RESULT_SUCCESS, 56 permissionState: abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED 57 } 58 } catch (error) { 59 Log.error(`grant permission faild, permission: ${permission}, code: ${error.code}, message: ${error.message}.`); 60 return { 61 operationResult: Constants.RESULT_FAILURE, 62 permissionState: abilityAccessCtrl.GrantStatus.PERMISSION_DENIED 63 } 64 } 65 } 66 67 /** 68 * 撤销权限并返回操作结果 69 * @param permission 操作权限 70 * @param flag 授权flag 71 * @param tokenId 应用token 72 * return 73 */ 74 public static async revokePermissionWithResult( 75 permission: Permission, flag: number, tokenId: number 76 ): Promise<optionAndState> { 77 try { 78 let atManager = abilityAccessCtrl.createAtManager(); 79 await atManager.revokeUserGrantedPermission(tokenId, permission, flag); 80 Log.info(`revoke permission success, permission: ${permission}.`); 81 return { 82 operationResult: Constants.RESULT_SUCCESS, 83 permissionState: abilityAccessCtrl.GrantStatus.PERMISSION_DENIED 84 } 85 } catch (error) { 86 Log.error(`revoke permission faild, permission: ${permission}, code: ${error.code}, message: ${error.message}.`); 87 return { 88 operationResult: Constants.RESULT_FAILURE, 89 permissionState: abilityAccessCtrl.GrantStatus.PERMISSION_DENIED 90 } 91 } 92 } 93 94}