From 8ad5b0879c06889e7bfd9485efaf21cffb1df891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B5=E5=97=A3=E9=92=8A?= Date: Mon, 13 May 2024 14:15:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81URI=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 段嗣钊 Change-Id: I7f0b923bd479a12473bf4b34f38ac33c5e9c7550 --- .../include/uri_permission_manager_client.h | 11 +- .../uri_permission_manager_interface.h | 12 +- .../include/uri_permission_manager_proxy.h | 10 +- .../src/uri_permission_manager_client.cpp | 14 +- .../src/uri_permission_manager_proxy.cpp | 20 ++- .../src/uri_permission_manager_stub.cpp | 9 +- services/abilitymgr/src/ability_record.cpp | 9 +- .../uri_permission_manager_stub_impl.h | 57 +++++-- .../src/uri_permission_manager_stub_impl.cpp | 156 ++++++++++-------- .../uri_permission_impl_test.cpp | 20 +-- 10 files changed, 195 insertions(+), 123 deletions(-) diff --git a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h index 2628922647..5afcde92b1 100644 --- a/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h +++ b/interfaces/inner_api/uri_permission/include/uri_permission_manager_client.h @@ -37,7 +37,7 @@ public: * @param targetBundleName The user of uri. */ int GrantUriPermission(const Uri &uri, unsigned int flag, const std::string targetBundleName, int32_t appIndex = 0, - uint32_t initiatorTokenId = 0); + uint32_t initiatorTokenId = 0, int32_t abilityId = -1); /** * @brief Authorize the uri permission of to targetBundleName. @@ -46,8 +46,8 @@ public: * @param flag Want::FLAG_AUTH_READ_URI_PERMISSION or Want::FLAG_AUTH_WRITE_URI_PERMISSION. * @param targetBundleName The user of uri. */ - int GrantUriPermission(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0); + int GrantUriPermission(const std::vector &uriVec, unsigned int flag, const std::string targetBundleName, + int32_t appIndex = 0, uint32_t initiatorTokenId = 0, int32_t abilityId = -1); /** * @brief Authorize the uri permission to targetBundleName. @@ -78,15 +78,16 @@ public: * @brief Clear user's uri authorization record with auto remove flag. * * @param tokenId A tokenId of an application. + * @param abilityId The abilityId of an ability record. */ - void RevokeUriPermission(const Security::AccessToken::AccessTokenID tokenId); + void RevokeUriPermission(const uint32_t tokenId, int32_t abilityId = -1); /** * @brief Clear user's all uri authorization record with auto remove flag. * * @param tokenId A tokenId of an application. */ - int RevokeAllUriPermissions(const Security::AccessToken::AccessTokenID tokenId); + int RevokeAllUriPermissions(const uint32_t tokenId); /** * @brief Clear user's uri authorization record. diff --git a/interfaces/inner_api/uri_permission/include/uri_permission_manager_interface.h b/interfaces/inner_api/uri_permission/include/uri_permission_manager_interface.h index e7bf0af07e..776004c0ff 100644 --- a/interfaces/inner_api/uri_permission/include/uri_permission_manager_interface.h +++ b/interfaces/inner_api/uri_permission/include/uri_permission_manager_interface.h @@ -34,8 +34,8 @@ public: * @param targetBundleName The user of uri. * @return Returns true if the authorization is successful, otherwise returns false. */ - virtual int GrantUriPermission(const Uri &uri, unsigned int flag, - const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0) = 0; + virtual int GrantUriPermission(const Uri &uri, unsigned int flag, const std::string targetBundleName, + int32_t appIndex = 0, uint32_t initiatorTokenId = 0, int32_t abilityId = -1) = 0; /** * @brief Authorize the uri permission to targetBundleName. @@ -46,7 +46,8 @@ public: * @return Returns true if the authorization is successful, otherwise returns false. */ virtual int GrantUriPermission(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0) = 0; + const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0, + int32_t abilityId = -1) = 0; /** * @brief Authorize the uri permission to targetBundleName. @@ -77,9 +78,10 @@ public: * @brief Clear user's uri authorization record with autoremove flag. * * @param tokenId A tokenId of an application. + * @param abilityId The abilityId of an ability record. * @return Returns true if the remove is successful, otherwise returns false. */ - virtual void RevokeUriPermission(const Security::AccessToken::AccessTokenID tokenId) = 0; + virtual void RevokeUriPermission(const uint32_t tokenId, int32_t abilityId = -1) = 0; /** * @brief Clear user's all uri authorization record with autoremove flag. @@ -87,7 +89,7 @@ public: * @param tokenId A tokenId of an application. * @return Returns true if the remove is successful, otherwise returns false. */ - virtual int RevokeAllUriPermissions(const Security::AccessToken::AccessTokenID tokenId) = 0; + virtual int RevokeAllUriPermissions(const uint32_t tokenId) = 0; /** * @brief Clear user's uri authorization record. diff --git a/interfaces/inner_api/uri_permission/include/uri_permission_manager_proxy.h b/interfaces/inner_api/uri_permission/include/uri_permission_manager_proxy.h index d9726d74d7..607b3971a7 100644 --- a/interfaces/inner_api/uri_permission/include/uri_permission_manager_proxy.h +++ b/interfaces/inner_api/uri_permission/include/uri_permission_manager_proxy.h @@ -28,18 +28,20 @@ public: virtual ~UriPermissionManagerProxy() = default; virtual int GrantUriPermission(const Uri &uri, unsigned int flag, - const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0) override; + const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0, + int32_t abilityId = -1) override; virtual int GrantUriPermission(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0) override; + const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0, + int32_t abilityId = -1) override; virtual int32_t GrantUriPermissionPrivileged(const std::vector &uriVec, uint32_t flag, const std::string &targetBundleName, int32_t appIndex = 0) override; virtual int GrantUriPermissionFor2In1(const std::vector &uriVec, unsigned int flag, const std::string &targetBundleName, int32_t appIndex = 0, bool isSystemAppCall = false) override; - virtual void RevokeUriPermission(const Security::AccessToken::AccessTokenID tokenId) override; - virtual int RevokeAllUriPermissions(const Security::AccessToken::AccessTokenID tokenId) override; + virtual void RevokeUriPermission(const uint32_t tokenId, int32_t abilityId) override; + virtual int RevokeAllUriPermissions(const uint32_t tokenId) override; virtual int RevokeUriPermissionManually(const Uri &uri, const std::string bundleName) override; virtual bool VerifyUriPermission(const Uri &uri, uint32_t flag, uint32_t tokenId) override; virtual std::vector CheckUriAuthorization(const std::vector &uriVec, diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp index 80e2a80ab9..4f0d4c8738 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_manager_client.cpp @@ -36,18 +36,18 @@ UriPermissionManagerClient& UriPermissionManagerClient::GetInstance() } int UriPermissionManagerClient::GrantUriPermission(const Uri &uri, unsigned int flag, - const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId) + const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "targetBundleName :%{public}s", targetBundleName.c_str()); auto uriPermMgr = ConnectUriPermService(); if (uriPermMgr) { - return uriPermMgr->GrantUriPermission(uri, flag, targetBundleName, appIndex, initiatorTokenId); + return uriPermMgr->GrantUriPermission(uri, flag, targetBundleName, appIndex, initiatorTokenId, abilityId); } return INNER_ERR; } int UriPermissionManagerClient::GrantUriPermission(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId) + const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "targetBundleName: %{public}s, uriVec size: %{public}zu", targetBundleName.c_str(), uriVec.size()); @@ -57,7 +57,7 @@ int UriPermissionManagerClient::GrantUriPermission(const std::vector &uriVe } auto uriPermMgr = ConnectUriPermService(); if (uriPermMgr) { - return uriPermMgr->GrantUriPermission(uriVec, flag, targetBundleName, appIndex, initiatorTokenId); + return uriPermMgr->GrantUriPermission(uriVec, flag, targetBundleName, appIndex, initiatorTokenId, abilityId); } return INNER_ERR; } @@ -94,16 +94,16 @@ int UriPermissionManagerClient::GrantUriPermissionFor2In1(const std::vector return INNER_ERR; } -void UriPermissionManagerClient::RevokeUriPermission(const Security::AccessToken::AccessTokenID tokenId) +void UriPermissionManagerClient::RevokeUriPermission(const uint32_t tokenId, int32_t abilityId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "UriPermissionManagerClient::RevokeUriPermission is called."); auto uriPermMgr = ConnectUriPermService(); if (uriPermMgr) { - return uriPermMgr->RevokeUriPermission(tokenId); + return uriPermMgr->RevokeUriPermission(tokenId, abilityId); } } -int UriPermissionManagerClient::RevokeAllUriPermissions(const Security::AccessToken::AccessTokenID tokenId) +int UriPermissionManagerClient::RevokeAllUriPermissions(const uint32_t tokenId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "UriPermissionManagerClient::RevokeAllUriPermissions is called."); auto uriPermMgr = ConnectUriPermService(); diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_manager_proxy.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_manager_proxy.cpp index 1954a726c8..873df2d9cc 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_manager_proxy.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_manager_proxy.cpp @@ -29,7 +29,7 @@ UriPermissionManagerProxy::UriPermissionManagerProxy(const sptr & : IRemoteProxy(impl) {} int UriPermissionManagerProxy::GrantUriPermission(const Uri &uri, unsigned int flag, - const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId) + const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "UriPermissionManagerProxy::GrantUriPermission is called."); MessageParcel data; @@ -57,6 +57,10 @@ int UriPermissionManagerProxy::GrantUriPermission(const Uri &uri, unsigned int f TAG_LOGE(AAFwkTag::URIPERMMGR, "Write initiatorTokenId failed."); return INNER_ERR; } + if (!data.WriteInt32(abilityId)) { + TAG_LOGE(AAFwkTag::URIPERMMGR, "Write abilityId failed."); + return INNER_ERR; + } MessageParcel reply; MessageOption option; int error = SendTransactCmd(UriPermMgrCmd::ON_GRANT_URI_PERMISSION, data, reply, option); @@ -68,7 +72,7 @@ int UriPermissionManagerProxy::GrantUriPermission(const Uri &uri, unsigned int f } int UriPermissionManagerProxy::GrantUriPermission(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId) + const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "UriPermissionManagerProxy::GrantUriPermission is called."); if (uriVec.empty() || uriVec.size() > MAX_URI_COUNT) { @@ -106,6 +110,10 @@ int UriPermissionManagerProxy::GrantUriPermission(const std::vector &uriVec TAG_LOGE(AAFwkTag::URIPERMMGR, "Write initiatorTokenId failed."); return INNER_ERR; } + if (!data.WriteInt32(abilityId)) { + TAG_LOGE(AAFwkTag::URIPERMMGR, "Write abilityId failed."); + return INNER_ERR; + } MessageParcel reply; MessageOption option; int error = SendTransactCmd(UriPermMgrCmd::ON_BATCH_GRANT_URI_PERMISSION, data, reply, option); @@ -210,7 +218,7 @@ int UriPermissionManagerProxy::GrantUriPermissionFor2In1(const std::vector return reply.ReadInt32(); } -void UriPermissionManagerProxy::RevokeUriPermission(const Security::AccessToken::AccessTokenID tokenId) +void UriPermissionManagerProxy::RevokeUriPermission(const uint32_t tokenId, int32_t abilityId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "UriPermissionManagerProxy::RevokeUriPermission is called."); MessageParcel data; @@ -222,6 +230,10 @@ void UriPermissionManagerProxy::RevokeUriPermission(const Security::AccessToken: TAG_LOGE(AAFwkTag::URIPERMMGR, "Write AccessTokenID failed."); return; } + if (!data.WriteInt32(abilityId)) { + TAG_LOGE(AAFwkTag::URIPERMMGR, "Write AccessTokenID failed."); + return; + } MessageParcel reply; MessageOption option; int error = SendTransactCmd(UriPermMgrCmd::ON_REVOKE_URI_PERMISSION, data, reply, option); @@ -230,7 +242,7 @@ void UriPermissionManagerProxy::RevokeUriPermission(const Security::AccessToken: } } -int UriPermissionManagerProxy::RevokeAllUriPermissions(const Security::AccessToken::AccessTokenID tokenId) +int UriPermissionManagerProxy::RevokeAllUriPermissions(const uint32_t tokenId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "UriPermissionManagerProxy::RevokeAllUriPermissions is called."); MessageParcel data; diff --git a/interfaces/inner_api/uri_permission/src/uri_permission_manager_stub.cpp b/interfaces/inner_api/uri_permission/src/uri_permission_manager_stub.cpp index 2e097c6736..bc7dbe4ce0 100644 --- a/interfaces/inner_api/uri_permission/src/uri_permission_manager_stub.cpp +++ b/interfaces/inner_api/uri_permission/src/uri_permission_manager_stub.cpp @@ -72,7 +72,8 @@ int UriPermissionManagerStub::OnRemoteRequest( int UriPermissionManagerStub::HandleRevokeUriPermission(MessageParcel &data, MessageParcel &reply) { auto tokenId = data.ReadUint32(); - RevokeUriPermission(tokenId); + auto abilityId = data.ReadInt32(); + RevokeUriPermission(tokenId, abilityId); return ERR_OK; } @@ -95,7 +96,8 @@ int UriPermissionManagerStub::HandleGrantUriPermission(MessageParcel &data, Mess auto targetBundleName = data.ReadString(); auto appIndex = data.ReadInt32(); auto initiatorTokenId = data.ReadUint32(); - int result = GrantUriPermission(*uri, flag, targetBundleName, appIndex, initiatorTokenId); + auto abilityId = data.ReadInt32(); + int result = GrantUriPermission(*uri, flag, targetBundleName, appIndex, initiatorTokenId, abilityId); reply.WriteInt32(result); return ERR_OK; } @@ -120,7 +122,8 @@ int UriPermissionManagerStub::HandleBatchGrantUriPermission(MessageParcel &data, auto targetBundleName = data.ReadString(); auto appIndex = data.ReadInt32(); auto initiatorTokenId = data.ReadUint32(); - int result = GrantUriPermission(uriVec, flag, targetBundleName, appIndex, initiatorTokenId); + auto abilityId = data.ReadInt32(); + int result = GrantUriPermission(uriVec, flag, targetBundleName, appIndex, initiatorTokenId, abilityId); reply.WriteInt32(result); return ERR_OK; } diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index c02c0b595f..2a6168a997 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -1725,8 +1725,9 @@ void AbilityRecord::SendSandboxSavefileResult(const Want &want, int resultCode, } Uri uri(uriStr); uint32_t initiatorTokenId = IPCSkeleton::GetCallingTokenID(); + bool flag = Want::FLAG_AUTH_WRITE_URI_PERMISSION; auto ret = IN_PROCESS_CALL(UriPermissionManagerClient::GetInstance().GrantUriPermission(uri, - Want::FLAG_AUTH_WRITE_URI_PERMISSION, abilityInfo_.bundleName, appIndex_, initiatorTokenId)); + flag, abilityInfo_.bundleName, appIndex_, initiatorTokenId, recordId_)); if (ret != ERR_OK) { TAG_LOGW(AAFwkTag::ABILITYMGR, "GrantUriPermission failed"); } @@ -3083,7 +3084,7 @@ void AbilityRecord::GrantUriPermissionInner(Want &want, std::vector return; } auto ret = IN_PROCESS_CALL(UriPermissionManagerClient::GetInstance().GrantUriPermission(validUriList, flag, - targetBundleName, appIndex_, callerTokenId)); + targetBundleName, appIndex_, callerTokenId, recordId_)); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "grant uri permission failed, Error Code is %{public}d", ret); return; @@ -3108,7 +3109,7 @@ bool AbilityRecord::GrantPermissionToShell(const std::vector &strUr uint32_t initiatorTokenId = IPCSkeleton::GetCallingTokenID(); for (auto&& uri : uriVec) { auto ret = IN_PROCESS_CALL(UriPermissionManagerClient::GetInstance().GrantUriPermission(uri, flag, targetPkg, - appIndex_, initiatorTokenId)); + appIndex_, initiatorTokenId, recordId_)); if (ret == ERR_OK) { isGrantedUriPermission_ = true; } @@ -3185,7 +3186,7 @@ void AbilityRecord::RevokeUriPermission() { if (isGrantedUriPermission_) { TAG_LOGD(AAFwkTag::ABILITYMGR, "To remove uri permission."); - UriPermissionManagerClient::GetInstance().RevokeUriPermission(applicationInfo_.accessTokenId); + UriPermissionManagerClient::GetInstance().RevokeUriPermission(applicationInfo_.accessTokenId, recordId_); isGrantedUriPermission_ = false; } } diff --git a/services/uripermmgr/include/uri_permission_manager_stub_impl.h b/services/uripermmgr/include/uri_permission_manager_stub_impl.h index 5c8ab56fc3..9a7a4958dd 100644 --- a/services/uripermmgr/include/uri_permission_manager_stub_impl.h +++ b/services/uripermmgr/include/uri_permission_manager_stub_impl.h @@ -19,6 +19,7 @@ #include #include #include +#include #include "app_mgr_interface.h" #include "bundle_mgr_helper.h" @@ -32,13 +33,37 @@ namespace OHOS::AAFwk { namespace { using ClearProxyCallback = std::function&)>; using TokenId = Security::AccessToken::AccessTokenID; +constexpr int32_t DEFAULT_ABILITY_ID = -1; } struct GrantInfo { unsigned int flag; const uint32_t fromTokenId; const uint32_t targetTokenId; - uint32_t autoRemove; + bool autoRemove; + std::unordered_set abilityIds; + + void AddAbilityId(int32_t abilityId) + { + if (abilityId != DEFAULT_ABILITY_ID) { + abilityIds.insert(abilityId); + } + } + + bool RemoveAbilityId(int32_t abilityId) + { + return abilityIds.erase(abilityId) > 0; + } + + bool IsEmptyAbilityId() + { + return abilityIds.empty(); + } + + void ClearAbilityIds() + { + abilityIds.clear(); + } }; struct PolicyInfo final { @@ -53,10 +78,11 @@ public: UriPermissionManagerStubImpl() = default; virtual ~UriPermissionManagerStubImpl() = default; - int GrantUriPermission(const Uri &uri, unsigned int flag, - const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0) override; + int GrantUriPermission(const Uri &uri, unsigned int flag, const std::string targetBundleName, + int32_t appIndex = 0, uint32_t initiatorTokenId = 0, int32_t abilityId = -1) override; int GrantUriPermission(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0) override; + const std::string targetBundleName, int32_t appIndex = 0, uint32_t initiatorTokenId = 0, + int32_t abilityId = -1) override; int32_t GrantUriPermissionPrivileged(const std::vector &uriVec, uint32_t flag, const std::string &targetBundleName, int32_t appIndex = 0) override; @@ -67,7 +93,7 @@ public: int GrantUriPermissionFor2In1(const std::vector &uriVec, unsigned int flag, const std::string &targetBundleName, int32_t appIndex = 0, bool isSystemAppCall = false) override; // only for foundation calling - void RevokeUriPermission(const TokenId tokenId) override; + void RevokeUriPermission(const TokenId tokenId, int32_t abilityId = -1) override; int RevokeAllUriPermissions(uint32_t tokenId) override; int RevokeUriPermissionManually(const Uri &uri, const std::string bundleName) override; @@ -81,23 +107,23 @@ private: std::shared_ptr ConnectManagerHelper(); int32_t GetCurrentAccountId() const; int GrantUriPermissionImpl(const Uri &uri, unsigned int flag, - TokenId fromTokenId, TokenId targetTokenId, uint32_t autoRemove); + TokenId fromTokenId, TokenId targetTokenId, int32_t abilityId); int AddTempUriPermission(const std::string &uri, unsigned int flag, TokenId fromTokenId, - TokenId targetTokenId, uint32_t autoRemove); + TokenId targetTokenId, int32_t abilityId); int GrantBatchUriPermissionImpl(const std::vector &uriVec, unsigned int flag, - TokenId initiatorTokenId, TokenId targetTokenId, uint32_t autoRemove); + TokenId initiatorTokenId, TokenId targetTokenId, int32_t abilityId); int GrantBatchUriPermission(const std::vector &uriVec, unsigned int flag, uint32_t initiatorTokenId, - uint32_t targetTokenId, uint32_t autoRemove); + uint32_t targetTokenId, int32_t abilityId); int32_t GrantBatchUriPermissionPrivileged(const std::vector &uriVec, uint32_t flag, - uint32_t callerTokenId, uint32_t targetTokenId, uint32_t autoRemove); + uint32_t callerTokenId, uint32_t targetTokenId, int32_t abilityId = -1); int32_t GrantBatchUriPermissionFor2In1Privileged(const std::vector &uriVec, uint32_t flag, - uint32_t callerTokenId, uint32_t targetTokenId, uint32_t autoRemove); + uint32_t callerTokenId, uint32_t targetTokenId, int32_t abilityId = -1); int GrantSingleUriPermission(const Uri &uri, unsigned int flag, uint32_t callerTokenId, uint32_t targetTokenId, - uint32_t autoRemove); + int32_t abilityId); bool SendEvent(uint32_t callerTokenId, uint32_t targetTokenId, std::string &uri); @@ -112,10 +138,11 @@ private: std::string GetBundleNameByTokenId(uint32_t tokenId); int GrantUriPermissionInner(const std::vector &uriVec, unsigned int flag, const std::string targetBundleName, - int32_t appIndex, uint32_t initiatorTokenId); + int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId = -1); int GrantUriPermissionFor2In1Inner(const std::vector &uriVec, unsigned int flag, - const std::string &targetBundleName, int32_t appIndex, bool isSystemAppCall, uint32_t initiatorTokenId = 0); + const std::string &targetBundleName, int32_t appIndex, bool isSystemAppCall, uint32_t initiatorTokenId = 0, + int32_t abilityId = -1); void HandleUriPermission( uint64_t tokenId, unsigned int flag, std::vector &docsVec, bool isSystemAppCall); @@ -136,6 +163,8 @@ private: bool IsLinuxFusionCall(); + void RemoveUriRecord(std::vector &uriList, const TokenId tokenId, int32_t abilityId); + class ProxyDeathRecipient : public IRemoteObject::DeathRecipient { public: explicit ProxyDeathRecipient(ClearProxyCallback&& proxy) : proxy_(proxy) {} diff --git a/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp b/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp index 4ce411a529..c0b984c33e 100644 --- a/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp +++ b/services/uripermmgr/src/uri_permission_manager_stub_impl.cpp @@ -45,6 +45,7 @@ namespace { constexpr int32_t DEFAULT_USER_ID = 0; constexpr int32_t ERR_OK = 0; constexpr uint32_t FLAG_READ_WRITE_URI = Want::FLAG_AUTH_READ_URI_PERMISSION | Want::FLAG_AUTH_WRITE_URI_PERMISSION; +constexpr uint32_t FLAG_WRITE_URI = Want::FLAG_AUTH_WRITE_URI_PERMISSION; constexpr const char* CLOUND_DOCS_URI_MARK = "?networkid="; constexpr const char* FOUNDATION_PROCESS_NAME = "foundation"; constexpr const char* LINUX_FUSION_SERVICE = "linux_fusion_service"; @@ -85,7 +86,7 @@ bool UriPermissionManagerStubImpl::IsAuthorizationUriAllowed(uint32_t fromTokenI } int UriPermissionManagerStubImpl::GrantUriPermission(const Uri &uri, unsigned int flag, - const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId) + const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, "Uri is %{private}s.", uri.ToString().c_str()); if (!IsSAOrSystemAppCall()) { @@ -93,11 +94,11 @@ int UriPermissionManagerStubImpl::GrantUriPermission(const Uri &uri, unsigned in return CHECK_PERMISSION_FAILED; } std::vector uriVec = { uri }; - return GrantUriPermission(uriVec, flag, targetBundleName, appIndex, initiatorTokenId); + return GrantUriPermission(uriVec, flag, targetBundleName, appIndex, initiatorTokenId, abilityId); } int UriPermissionManagerStubImpl::GrantUriPermission(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId) + const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, "BundleName is %{public}s, appIndex is %{public}d, size of uriVec is %{public}zu.", targetBundleName.c_str(), appIndex, uriVec.size()); @@ -119,9 +120,9 @@ int UriPermissionManagerStubImpl::GrantUriPermission(const std::vector &uri isSystemAppCall = CheckIsSystemAppByTokenId(initiatorTokenId); } return GrantUriPermissionFor2In1Inner( - uriVec, flag, targetBundleName, appIndex, isSystemAppCall, initiatorTokenId); + uriVec, flag, targetBundleName, appIndex, isSystemAppCall, initiatorTokenId, abilityId); } - return GrantUriPermissionInner(uriVec, flag, targetBundleName, appIndex, initiatorTokenId); + return GrantUriPermissionInner(uriVec, flag, targetBundleName, appIndex, initiatorTokenId, abilityId); } int32_t UriPermissionManagerStubImpl::GrantUriPermissionPrivileged(const std::vector &uriVec, uint32_t flag, @@ -144,6 +145,7 @@ int32_t UriPermissionManagerStubImpl::GrantUriPermissionPrivileged(const std::ve TAG_LOGE(AAFwkTag::URIPERMMGR, "Flag is invalid, value is %{public}u.", flag); return ERR_CODE_INVALID_URI_FLAG; } + flag &= FLAG_READ_WRITE_URI; uint32_t targetTokenId = 0; auto ret = GetTokenIdByBundleName(targetBundleName, 0, targetTokenId); if (ret != ERR_OK) { @@ -151,15 +153,14 @@ int32_t UriPermissionManagerStubImpl::GrantUriPermissionPrivileged(const std::ve return ret; } - uint32_t autoRemove = IsFoundationCall() ? 1 : 0; if (AppUtils::GetInstance().IsGrantPersistUriPermission()) { - return GrantBatchUriPermissionFor2In1Privileged(uriVec, flag, callerTokenId, targetTokenId, autoRemove); + return GrantBatchUriPermissionFor2In1Privileged(uriVec, flag, callerTokenId, targetTokenId); } - return GrantBatchUriPermissionPrivileged(uriVec, flag, callerTokenId, targetTokenId, autoRemove); + return GrantBatchUriPermissionPrivileged(uriVec, flag, callerTokenId, targetTokenId); } int UriPermissionManagerStubImpl::GrantUriPermissionInner(const std::vector &uriVec, unsigned int flag, - const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId) + const std::string targetBundleName, int32_t appIndex, uint32_t initiatorTokenId, int32_t abilityId) { TAG_LOGD(AAFwkTag::URIPERMMGR, "Called."); flag &= FLAG_READ_WRITE_URI; @@ -169,20 +170,20 @@ int UriPermissionManagerStubImpl::GrantUriPermissionInner(const std::vector TAG_LOGE(AAFwkTag::URIPERMMGR, "get tokenId of target bundle name failed."); return ret; } - // autoRemove will be set to 1 if the process name is foundation. - uint32_t autoRemove = 0; + // recordId will be set default id if the process name is not foundation. + int32_t recordId = -1; uint32_t appTokenId = IPCSkeleton::GetCallingTokenID(); if (IsFoundationCall()) { - autoRemove = 1; + recordId = abilityId; appTokenId = initiatorTokenId; auto callerName = GetTokenName(appTokenId); TAG_LOGI(AAFwkTag::URIPERMMGR, "RealTokenId is %{public}u, RealCallerName is %{public}s.", appTokenId, callerName.c_str()); } if (uriVec.size() == 1) { - return GrantSingleUriPermission(uriVec[0], flag, appTokenId, targetTokenId, autoRemove); + return GrantSingleUriPermission(uriVec[0], flag, appTokenId, targetTokenId, recordId); } - return GrantBatchUriPermission(uriVec, flag, appTokenId, targetTokenId, autoRemove); + return GrantBatchUriPermission(uriVec, flag, appTokenId, targetTokenId, recordId); } int checkPersistPermission(uint64_t tokenId, const std::vector &policy, std::vector &result) @@ -251,13 +252,15 @@ int UriPermissionManagerStubImpl::GrantUriPermissionFor2In1(const std::vector guard(mutex_); auto search = uriMap_.find(uri); - GrantInfo info = { flag, fromTokenId, targetTokenId, autoRemove }; + bool autoRemove = (abilityId != DEFAULT_ABILITY_ID); + GrantInfo info = { flag, fromTokenId, targetTokenId, autoRemove, {} }; if (search == uriMap_.end()) { TAG_LOGI(AAFwkTag::URIPERMMGR, "Insert an uri r/w permission."); + info.AddAbilityId(abilityId); std::list infoList = { info }; uriMap_.emplace(uri, infoList); return ERR_OK; @@ -265,17 +268,25 @@ int UriPermissionManagerStubImpl::AddTempUriPermission(const std::string &uri, u auto& infoList = search->second; for (auto& item : infoList) { if (item.fromTokenId == fromTokenId && item.targetTokenId == targetTokenId) { - TAG_LOGD(AAFwkTag::URIPERMMGR, "Item: flag is %{public}u, autoRemove is %{public}u.", - item.flag, item.autoRemove); - if (item.autoRemove == 1 && info.autoRemove == 0) { - TAG_LOGD(AAFwkTag::URIPERMMGR, "Update autoRemove."); - item.autoRemove = 1; - } - if ((flag & (item.flag | Want::FLAG_AUTH_READ_URI_PERMISSION)) == 0) { + TAG_LOGI(AAFwkTag::URIPERMMGR, + "Item: flag is %{public}u, autoRemove is %{public}u, ability size is %{public}zu.", + item.flag, item.autoRemove, item.abilityIds.size()); + item.AddAbilityId(abilityId); + // r-w + if ((item.flag & FLAG_WRITE_URI) == 0 && (flag & FLAG_WRITE_URI) != 0) { TAG_LOGI(AAFwkTag::URIPERMMGR, "Update uri r/w permission."); - item.flag = flag; - } else { - TAG_LOGI(AAFwkTag::URIPERMMGR, "Uri has been granted, not to grant again."); + item.autoRemove = autoRemove; + item.flag |= FLAG_WRITE_URI; + return ERR_OK; + } + // w-r + TAG_LOGI(AAFwkTag::URIPERMMGR, "Uri has been granted, not to grant again."); + if ((item.flag & FLAG_WRITE_URI) != 0 && (flag & FLAG_WRITE_URI) == 0) { + return ERR_OK; + } + // other + if (!autoRemove) { + item.autoRemove = autoRemove; } return ERR_OK; } @@ -286,11 +297,11 @@ int UriPermissionManagerStubImpl::AddTempUriPermission(const std::string &uri, u } int UriPermissionManagerStubImpl::GrantUriPermissionImpl(const Uri &uri, unsigned int flag, - TokenId callerTokenId, TokenId targetTokenId, uint32_t autoRemove) + TokenId callerTokenId, TokenId targetTokenId, int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, "uri = %{private}s, flag = %{public}i, callerTokenId = %{public}i," - "targetTokenId = %{public}i, autoRemove = %{public}i", uri.ToString().c_str(), flag, callerTokenId, - targetTokenId, autoRemove); + "targetTokenId = %{public}i, abilityId = %{public}i", uri.ToString().c_str(), flag, callerTokenId, + targetTokenId, abilityId); ConnectManager(storageManager_, STORAGE_MANAGER_MANAGER_ID); if (storageManager_ == nullptr) { TAG_LOGE(AAFwkTag::URIPERMMGR, "ConnectManager failed"); @@ -307,17 +318,17 @@ int UriPermissionManagerStubImpl::GrantUriPermissionImpl(const Uri &uri, unsigne TAG_LOGE(AAFwkTag::URIPERMMGR, "failed to CreateShareFile."); return INNER_ERR; } - AddTempUriPermission(uriStr, flag, callerTokenId, targetTokenId, autoRemove); + AddTempUriPermission(uriStr, flag, callerTokenId, targetTokenId, abilityId); SendEvent(callerTokenId, targetTokenId, uriStr); return ERR_OK; } int UriPermissionManagerStubImpl::GrantSingleUriPermission(const Uri &uri, unsigned int flag, uint32_t callerTokenId, - uint32_t targetTokenId, uint32_t autoRemove) + uint32_t targetTokenId, int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, - "uri is %{private}s, callerTokenId is %{public}u, targetTokenId is %{public}u, autoRemove is %{public}u", - uri.ToString().c_str(), callerTokenId, targetTokenId, autoRemove); + "uri is %{private}s, callerTokenId is %{public}u, targetTokenId is %{public}u, abilityId is %{public}d", + uri.ToString().c_str(), callerTokenId, targetTokenId, abilityId); if (!CheckUriTypeIsValid(uri)) { TAG_LOGE(AAFwkTag::URIPERMMGR, "Check uri type failed, uri is %{private}s", uri.ToString().c_str()); return ERR_CODE_INVALID_URI_TYPE; @@ -328,13 +339,13 @@ int UriPermissionManagerStubImpl::GrantSingleUriPermission(const Uri &uri, unsig uri.ToString().c_str(), callerTokenId); return CHECK_PERMISSION_FAILED; } - return GrantUriPermissionImpl(uri, flag, callerTokenId, targetTokenId, autoRemove); + return GrantUriPermissionImpl(uri, flag, callerTokenId, targetTokenId, abilityId); } int UriPermissionManagerStubImpl::GrantBatchUriPermissionImpl(const std::vector &uriVec, - unsigned int flag, TokenId callerTokenId, TokenId targetTokenId, uint32_t autoRemove) + unsigned int flag, TokenId callerTokenId, TokenId targetTokenId, int32_t abilityId) { - TAG_LOGI(AAFwkTag::URIPERMMGR, "callerTokenId is %{public}u, targetTokenId is %{public}u, flag is %{public}i," + TAG_LOGI(AAFwkTag::URIPERMMGR,"callerTokenId is %{public}u, targetTokenId is %{public}u, flag is %{public}i," "list size is %{public}zu", callerTokenId, targetTokenId, flag, uriVec.size()); ConnectManager(storageManager_, STORAGE_MANAGER_MANAGER_ID); if (storageManager_ == nullptr) { @@ -359,7 +370,7 @@ int UriPermissionManagerStubImpl::GrantBatchUriPermissionImpl(const std::vector< TAG_LOGE(AAFwkTag::URIPERMMGR, "failed to CreateShareFile."); continue; } - AddTempUriPermission(uriVec[i], flag, callerTokenId, targetTokenId, autoRemove); + AddTempUriPermission(uriVec[i], flag, callerTokenId, targetTokenId, abilityId); if (needSendEvent) { eventInfo.uri = uriVec[i]; EventReport::SendKeyEvent(EventName::GRANT_URI_PERMISSION, HiSysEventType::BEHAVIOR, eventInfo); @@ -374,11 +385,11 @@ int UriPermissionManagerStubImpl::GrantBatchUriPermissionImpl(const std::vector< } int UriPermissionManagerStubImpl::GrantBatchUriPermission(const std::vector &uriVec, unsigned int flag, - uint32_t callerTokenId, uint32_t targetTokenId, uint32_t autoRemove) + uint32_t callerTokenId, uint32_t targetTokenId, int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, - "callerTokenId is %{public}u, targetTokenId is %{public}u, flag is %{public}u, autoRemove is %{public}u.", - callerTokenId, targetTokenId, flag, autoRemove); + "callerTokenId is %{public}u, targetTokenId is %{public}u, flag is %{public}u, abilityId is %{public}u.", + callerTokenId, targetTokenId, flag, abilityId); TokenIdPermission tokenIdPermission(callerTokenId); std::vector uriStrVec = {}; for (const auto &uri : uriVec) { @@ -396,11 +407,11 @@ int UriPermissionManagerStubImpl::GrantBatchUriPermission(const std::vector TAG_LOGE(AAFwkTag::URIPERMMGR, "Valid uri list is empty."); return INNER_ERR; } - return GrantBatchUriPermissionImpl(uriStrVec, flag, callerTokenId, targetTokenId, autoRemove); + return GrantBatchUriPermissionImpl(uriStrVec, flag, callerTokenId, targetTokenId, abilityId); } int32_t UriPermissionManagerStubImpl::GrantBatchUriPermissionPrivileged(const std::vector &uriVec, uint32_t flag, - uint32_t callerTokenId, uint32_t targetTokenId, uint32_t autoRemove) + uint32_t callerTokenId, uint32_t targetTokenId, int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, "callerTokenId is %{public}u, targetTokenId is %{public}u, flag is %{public}u.", callerTokenId, targetTokenId, flag); @@ -416,11 +427,11 @@ int32_t UriPermissionManagerStubImpl::GrantBatchUriPermissionPrivileged(const st TAG_LOGE(AAFwkTag::URIPERMMGR, "Valid uri list is empty."); return ERR_CODE_INVALID_URI_TYPE; } - return GrantBatchUriPermissionImpl(uriStrVec, flag, callerTokenId, targetTokenId, autoRemove); + return GrantBatchUriPermissionImpl(uriStrVec, flag, callerTokenId, targetTokenId, abilityId); } int32_t UriPermissionManagerStubImpl::GrantBatchUriPermissionFor2In1Privileged(const std::vector &uriVec, - uint32_t flag, uint32_t callerTokenId, uint32_t targetTokenId, uint32_t autoRemove) + uint32_t flag, uint32_t callerTokenId, uint32_t targetTokenId, int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, "callerTokenId is %{public}u, targetTokenId is %{public}u, flag is %{public}u.", callerTokenId, targetTokenId, flag); @@ -450,7 +461,7 @@ int32_t UriPermissionManagerStubImpl::GrantBatchUriPermissionFor2In1Privileged(c } if (!uriStrVec.empty()) { - auto ret = GrantBatchUriPermissionImpl(uriStrVec, flag, callerTokenId, targetTokenId, autoRemove); + auto ret = GrantBatchUriPermissionImpl(uriStrVec, flag, callerTokenId, targetTokenId, abilityId); if (docsVec.empty()) { return ret; } @@ -461,33 +472,43 @@ int32_t UriPermissionManagerStubImpl::GrantBatchUriPermissionFor2In1Privileged(c return ERR_OK; } -void UriPermissionManagerStubImpl::RevokeUriPermission(const TokenId tokenId) +void UriPermissionManagerStubImpl::RemoveUriRecord(std::vector &uriList, const TokenId tokenId, + int32_t abilityId) { - TAG_LOGI(AAFwkTag::URIPERMMGR, "Start to remove uri permission, tokenId is %{public}u", tokenId); + std::lock_guard guard(mutex_); + for (auto iter = uriMap_.begin(); iter != uriMap_.end();) { + auto& list = iter->second; + for (auto it = list.begin(); it != list.end(); it++) { + if (it->targetTokenId != tokenId || !it->RemoveAbilityId(abilityId) || !it->autoRemove) { + continue; + } + if (!it->IsEmptyAbilityId()) { + TAG_LOGD(AAFwkTag::URIPERMMGR, "Remove an abilityId."); + return; + } + TAG_LOGI(AAFwkTag::URIPERMMGR, "Erase an info form list."); + list.erase(it); + uriList.emplace_back(iter->first); + return; + } + if (list.empty()) { + uriMap_.erase(iter++); + continue; + } + ++iter; + } +} + +void UriPermissionManagerStubImpl::RevokeUriPermission(const TokenId tokenId, int32_t abilityId) +{ + TAG_LOGI(AAFwkTag::URIPERMMGR, + "Start to remove uri permission, tokenId is %{public}u, abilityId is %{public}d", tokenId, abilityId); if (!IsFoundationCall()) { TAG_LOGE(AAFwkTag::URIPERMMGR, "No permission to revoke uri permission."); return; } std::vector uriList; - { - std::lock_guard guard(mutex_); - for (auto iter = uriMap_.begin(); iter != uriMap_.end();) { - auto& list = iter->second; - for (auto it = list.begin(); it != list.end(); it++) { - if (it->targetTokenId == tokenId && it->autoRemove) { - TAG_LOGI(AAFwkTag::URIPERMMGR, "Erase an info form list."); - list.erase(it); - uriList.emplace_back(iter->first); - break; - } - } - if (list.empty()) { - uriMap_.erase(iter++); - continue; - } - iter++; - } - } + RemoveUriRecord(uriList, tokenId, abilityId); if (!uriList.empty()) { DeleteShareFile(tokenId, uriList); } @@ -739,7 +760,8 @@ int32_t UriPermissionManagerStubImpl::GetCurrentAccountId() const } int UriPermissionManagerStubImpl::GrantUriPermissionFor2In1Inner(const std::vector &uriVec, unsigned int flag, - const std::string &targetBundleName, int32_t appIndex, bool isSystemAppCall, uint32_t initiatorTokenId) + const std::string &targetBundleName, int32_t appIndex, bool isSystemAppCall, uint32_t initiatorTokenId, + int32_t abilityId) { TAG_LOGI(AAFwkTag::URIPERMMGR, "UriVec size is %{public}zu, targetBundleName is %{public}s", uriVec.size(), targetBundleName.c_str()); diff --git a/test/unittest/uri_permission_impl_test/uri_permission_impl_test.cpp b/test/unittest/uri_permission_impl_test/uri_permission_impl_test.cpp index 02236b1acb..9bb42a6b05 100755 --- a/test/unittest/uri_permission_impl_test/uri_permission_impl_test.cpp +++ b/test/unittest/uri_permission_impl_test/uri_permission_impl_test.cpp @@ -329,13 +329,13 @@ HWTEST_F(UriPermissionImplTest, Upms_VerifyUriPermission_001, TestSize.Level1) auto flagRead = 1; auto flagWrite = 2; - upms->AddTempUriPermission(uri, flagRead, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(uri, flagRead, callerTokenId, targetTokenId, 0); auto ret = upms->VerifyUriPermission(Uri(uri), flagRead, targetTokenId); ASSERT_EQ(ret, true); ret = upms->VerifyUriPermission(Uri(uri), flagWrite, targetTokenId); ASSERT_EQ(ret, false); - upms->AddTempUriPermission(uri, flagWrite, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(uri, flagWrite, callerTokenId, targetTokenId, 0); ret = upms->VerifyUriPermission(Uri(uri), flagRead, targetTokenId); ASSERT_EQ(ret, true); ret = upms->VerifyUriPermission(Uri(uri), flagWrite, targetTokenId); @@ -411,14 +411,14 @@ HWTEST_F(UriPermissionImplTest, Upms_CheckUriPermission_001, TestSize.Level1) ASSERT_EQ(ret, false); // read - upms->AddTempUriPermission(mediaPhotoUri.ToString(), flagRead, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(mediaPhotoUri.ToString(), flagRead, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(mediaPhotoUri, flagRead, tokenIdPermission); ASSERT_EQ(ret, true); ret = upms->CheckUriPermission(mediaPhotoUri, flagWrite, tokenIdPermission); ASSERT_EQ(ret, false); // write - upms->AddTempUriPermission(mediaPhotoUri.ToString(), flagWrite, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(mediaPhotoUri.ToString(), flagWrite, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(mediaPhotoUri, flagWrite, tokenIdPermission); ASSERT_EQ(ret, true); MyFlag::permissionProxyAuthorization_ = false; @@ -473,14 +473,14 @@ HWTEST_F(UriPermissionImplTest, Upms_CheckUriPermission_002, TestSize.Level1) ASSERT_EQ(ret, false); // read - upms->AddTempUriPermission(mediaAudioUri.ToString(), flagRead, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(mediaAudioUri.ToString(), flagRead, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(mediaAudioUri, flagRead, tokenIdPermission); ASSERT_EQ(ret, true); ret = upms->CheckUriPermission(mediaAudioUri, flagWrite, tokenIdPermission); ASSERT_EQ(ret, false); // write - upms->AddTempUriPermission(mediaAudioUri.ToString(), flagWrite, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(mediaAudioUri.ToString(), flagWrite, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(mediaAudioUri, flagWrite, tokenIdPermission); ASSERT_EQ(ret, true); MyFlag::permissionProxyAuthorization_ = false; @@ -526,14 +526,14 @@ HWTEST_F(UriPermissionImplTest, Upms_CheckUriPermission_003, TestSize.Level1) ASSERT_EQ(ret, false); // read - upms->AddTempUriPermission(docsUri.ToString(), flagRead, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(docsUri.ToString(), flagRead, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(docsUri, flagRead, tokenIdPermission); ASSERT_EQ(ret, true); ret = upms->CheckUriPermission(docsUri, flagWrite, tokenIdPermission); ASSERT_EQ(ret, false); // write - upms->AddTempUriPermission(docsUri.ToString(), flagWrite, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(docsUri.ToString(), flagWrite, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(docsUri, flagWrite, tokenIdPermission); ASSERT_EQ(ret, true); MyFlag::permissionProxyAuthorization_ = false; @@ -578,14 +578,14 @@ HWTEST_F(UriPermissionImplTest, Upms_CheckUriPermission_004, TestSize.Level1) ASSERT_EQ(ret, false); // read - upms->AddTempUriPermission(uri1.ToString(), flagRead, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(uri1.ToString(), flagRead, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(uri1, flagRead, tokenIdPermission); ASSERT_EQ(ret, true); ret = upms->CheckUriPermission(uri1, flagWrite, tokenIdPermission); ASSERT_EQ(ret, false); // write - upms->AddTempUriPermission(uri1.ToString(), flagWrite, callerTokenId, targetTokenId, false); + upms->AddTempUriPermission(uri1.ToString(), flagWrite, callerTokenId, targetTokenId, 0); ret = upms->CheckUriPermission(uri1, flagRead, tokenIdPermission); ASSERT_EQ(ret, true); ret = upms->CheckUriPermission(uri1, flagWrite, tokenIdPermission);