1 /* 2 * Copyright (c) 2024 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 DATA_SHARE_PERMISSION_H 17 #define DATA_SHARE_PERMISSION_H 18 19 #include <string> 20 21 #include "access_token.h" 22 #include "accesstoken_kit.h" 23 #include "uri.h" 24 25 namespace OHOS { 26 namespace DataShare { 27 class DataSharePermission { 28 using Uri = OHOS::Uri; 29 public: 30 DataSharePermission() = default; 31 ~DataSharePermission() = default; 32 /** 33 * @brief Verify if tokenId has access permission to uri. 34 35 * @param tokenId Unique identification of application. 36 * @param uri, Indicates the path of data to verify permission. 37 * @param isRead, Obtain read permission for true and write permission for false. 38 39 * @return Returns the error code. 40 */ 41 static int VerifyPermission(Security::AccessToken::AccessTokenID tokenId, const Uri &uri, bool isRead); 42 43 static std::pair<int, std::string> GetExtensionUriPermission(Uri &uri, 44 int32_t user, bool isRead); 45 static std::pair<int, std::string> GetDataShareSilentUriPermission(uint32_t tokenId, 46 int32_t user, std::string &extUri, bool isRead); 47 48 static int CheckExtensionTrusts(uint32_t consumerToken, uint32_t providerToken); 49 50 static void ReportExtensionFault(int32_t errCode, uint32_t tokenId, 51 std::string &uri, std::string &bussinessType); 52 53 static bool VerifyPermission(uint32_t tokenId, std::string &permission); 54 55 static bool VerifyPermission(Uri &uri, uint32_t tokenId, std::string &permission, bool isExtension); 56 57 static std::pair<int, std::string> GetSilentUriPermission(Uri &uri, int32_t user, bool isRead); 58 59 static int32_t UriIsTrust(Uri &uri); 60 61 static std::pair<int, std::string> GetUriPermission(Uri &uri, int32_t user, bool isRead, bool isExtension); 62 63 static int32_t IsExtensionValid(uint32_t tokenId, uint32_t fullToken, int32_t user); 64 private: 65 66 static constexpr const char *SCHEMA_DATASHARE = "datashare"; 67 static constexpr const char *SCHEMA_DATASHARE_PROXY = "datashareproxy"; 68 static constexpr const char *SCHEMA_PREFERENCE = "sharepreferences"; 69 static constexpr const char *SCHEMA_RDB = "rdb"; 70 static constexpr const char *SCHEMA_FILE = "file"; 71 72 static void ReportExcuteFault(int32_t errCode, std::string &consumer, std::string &provider); 73 74 static int VerifyDataObsPermissionInner(Security::AccessToken::AccessTokenID tokenID, 75 Uri &uri, bool isRead, bool &isTrust); 76 }; 77 } // namespace DataShare 78 } // namespace OHOS 79 #endif // DATA_SHARE_PERMISSION_H