1 /* 2 * Copyright (c) 2021-2022 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 16 #ifndef PERMISSION_POLICY_SET_H 17 #define PERMISSION_POLICY_SET_H 18 19 #include <memory> 20 #include <string> 21 #include <vector> 22 23 #include "access_token.h" 24 #include "generic_values.h" 25 #include "permission_def.h" 26 #include "permission_state_full.h" 27 #include "rwlock.h" 28 29 namespace OHOS { 30 namespace Security { 31 namespace AccessToken { 32 struct PermissionPolicySet final { 33 public: PermissionPolicySetfinal34 PermissionPolicySet() : tokenId_(0) {} 35 virtual ~PermissionPolicySet(); 36 37 static std::shared_ptr<PermissionPolicySet> BuildPermissionPolicySet(AccessTokenID tokenId, 38 const std::vector<PermissionStateFull>& permStateList); 39 static std::shared_ptr<PermissionPolicySet> RestorePermissionPolicy(AccessTokenID tokenId, 40 const std::vector<GenericValues>& permStateRes); 41 void StorePermissionPolicySet(std::vector<GenericValues>& permStateValueList); 42 void Update(const std::vector<PermissionStateFull>& permStateList); 43 44 int VerifyPermissStatus(const std::string& permissionName); 45 void GetDefPermissions(std::vector<PermissionDef>& permList); 46 void GetPermissionStateFulls(std::vector<PermissionStateFull>& permList); 47 int QueryPermissionFlag(const std::string& permissionName, int& flag); 48 int32_t UpdatePermissionStatus(const std::string& permissionName, bool isGranted, uint32_t flag, bool& isUpdated); 49 void ToString(std::string& info); 50 bool IsPermissionReqValid(int32_t tokenApl, const std::string& permissionName, 51 const std::vector<std::string>& nativeAcls); 52 void PermStateToString(int32_t tokenApl, const std::vector<std::string>& nativeAcls, std::string& info); 53 void GetPermissionStateList(std::vector<PermissionStateFull>& stateList); 54 void ResetUserGrantPermissionStatus(void); 55 56 private: 57 static void MergePermissionStateFull(std::vector<PermissionStateFull>& permStateList, 58 const PermissionStateFull& state); 59 void UpdatePermStateFull(const PermissionStateFull& permOld, PermissionStateFull& permNew); 60 void StorePermissionDef(std::vector<GenericValues>& valueList) const; 61 void StorePermissionState(std::vector<GenericValues>& valueList) const; 62 void PermDefToString(const PermissionDef& def, std::string& info) const; 63 void PermStateFullToString(const PermissionStateFull& state, std::string& info) const; 64 65 OHOS::Utils::RWLock permPolicySetLock_; 66 std::vector<PermissionStateFull> permStateList_; 67 AccessTokenID tokenId_; 68 }; 69 } // namespace AccessToken 70 } // namespace Security 71 } // namespace OHOS 72 #endif // PERMISSION_POLICY_SET_H 73 74