diff --git a/services/distributeddataservice/service/rdb/rdb_service_impl.cpp b/services/distributeddataservice/service/rdb/rdb_service_impl.cpp index 03ed9f43ea1ee7a431fce08dcfcc2a61ff0f8050..5a7655cacf3f4b6f8785624eaaf1e7ee4c27ec20 100644 --- a/services/distributeddataservice/service/rdb/rdb_service_impl.cpp +++ b/services/distributeddataservice/service/rdb/rdb_service_impl.cpp @@ -632,8 +632,9 @@ int32_t RdbServiceImpl::Subscribe(const RdbSyncerParam ¶m, const SubscribeOp return true; }); if (isCreate) { + auto subUser = SetSubUser(param.subUser_); AutoCache::GetInstance().SetObserver(tokenId, RemoveSuffix(param.storeName_), - GetWatchers(tokenId, param.storeName_)); + GetWatchers(tokenId, param.storeName_), subUser); } return RDB_OK; } @@ -661,8 +662,9 @@ int32_t RdbServiceImpl::UnSubscribe(const RdbSyncerParam ¶m, const Subscribe return true; }); if (destroyed) { + auto subUser = SetSubUser(param.subUser_); AutoCache::GetInstance().SetObserver(tokenId, RemoveSuffix(param.storeName_), - GetWatchers(tokenId, param.storeName_)); + GetWatchers(tokenId, param.storeName_), subUser); } return RDB_OK; } @@ -715,7 +717,8 @@ int32_t RdbServiceImpl::Delete(const RdbSyncerParam ¶m) { XCollie xcollie(__FUNCTION__, XCollie::XCOLLIE_LOG | XCollie::XCOLLIE_RECOVERY); auto tokenId = IPCSkeleton::GetCallingTokenID(); - AutoCache::GetInstance().CloseStore(tokenId, RemoveSuffix(param.storeName_)); + auto subUser = SetSubUser(param.subUser_); + AutoCache::GetInstance().CloseStore(tokenId, RemoveSuffix(param.storeName_), subUser); RdbSyncerParam tmpParam = param; HapTokenInfo hapTokenInfo; AccessTokenKit::GetHapTokenInfo(tokenId, hapTokenInfo); @@ -892,7 +895,11 @@ StoreMetaData RdbServiceImpl::GetStoreMetaData(const RdbSyncerParam ¶m) metaData.bundleName = param.bundleName_; metaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid; metaData.storeId = RemoveSuffix(param.storeName_); - metaData.user = std::to_string(user); + if (AccessTokenKit::GetTokenTypeFlag(metaData.tokenId) != TOKEN_HAP && param.subUser_ != 0) { + metaData.user = std::to_string(param.subUser_); + } else { + metaData.user = std::to_string(user); + } metaData.storeType = param.type_; metaData.securityLevel = param.level_; metaData.area = param.area_; @@ -1377,7 +1384,8 @@ int32_t RdbServiceImpl::Disable(const RdbSyncerParam ¶m) { auto tokenId = IPCSkeleton::GetCallingTokenID(); auto storeId = RemoveSuffix(param.storeName_); - AutoCache::GetInstance().Disable(tokenId, storeId); + auto userId = SetSubUser(param.subUser_); + AutoCache::GetInstance().Disable(tokenId, storeId, userId); return RDB_OK; } @@ -1385,7 +1393,8 @@ int32_t RdbServiceImpl::Enable(const RdbSyncerParam ¶m) { auto tokenId = IPCSkeleton::GetCallingTokenID(); auto storeId = RemoveSuffix(param.storeName_); - AutoCache::GetInstance().Enable(tokenId, storeId); + auto userId = SetSubUser(param.subUser_); + AutoCache::GetInstance().Enable(tokenId, storeId, userId); return RDB_OK; } @@ -1580,4 +1589,13 @@ int32_t RdbServiceImpl::VerifyPromiseInfo(const RdbSyncerParam ¶m) } return RDB_OK; } + +std::string RdbServiceImpl::SetSubUser(const int32_t subUser) +{ + std::string userId = ""; + if (AccessTokenKit::GetTokenTypeFlag(IPCSkeleton::GetCallingTokenID()) != TOKEN_HAP && subUser != 0) { + userId = std::to_string(subUser); + } + return userId; +} } // namespace OHOS::DistributedRdb \ No newline at end of file diff --git a/services/distributeddataservice/service/rdb/rdb_service_impl.h b/services/distributeddataservice/service/rdb/rdb_service_impl.h index 7d148f39a74f65b3e1f95907ccda43fed3b8c917..c6d98b33016ca0a4942477bdad340d65fe5d750c 100644 --- a/services/distributeddataservice/service/rdb/rdb_service_impl.h +++ b/services/distributeddataservice/service/rdb/rdb_service_impl.h @@ -208,6 +208,8 @@ private: static std::pair GetInstIndexAndUser(uint32_t tokenId, const std::string &bundleName); + static std::string SetSubUser(const int32_t subUser); + static bool GetDBPassword(const StoreMetaData &metaData, DistributedDB::CipherPassword &password); void GetCloudSchema(const RdbSyncerParam ¶m);