diff --git a/services/ans/include/reminder_event_manager.h b/services/ans/include/reminder_event_manager.h index dbc625f268dac5212cf2bc47067fd6711c2d74ac..1897ec52c33b094493b466485f146040d45ad87a 100644 --- a/services/ans/include/reminder_event_manager.h +++ b/services/ans/include/reminder_event_manager.h @@ -44,6 +44,7 @@ private: sptr GetBundleOption(const OHOS::EventFwk::Want &want) const; void HandlePackageRemove(const EventFwk::Want &want) const; void HandleProcessDied(const EventFwk::Want &want) const; + bool CheckCallingPermission(); std::shared_ptr reminderDataManager_ = nullptr; }; diff --git a/services/ans/src/reminder_event_manager.cpp b/services/ans/src/reminder_event_manager.cpp index 1a9c2b265f766da4ca766aa60d9ea820c6782586..e79b421acbe23a4800cdcb586b02fb304df2382d 100644 --- a/services/ans/src/reminder_event_manager.cpp +++ b/services/ans/src/reminder_event_manager.cpp @@ -15,6 +15,7 @@ #include "reminder_event_manager.h" +#include "accesstoken_kit.h" #include "ans_log_wrapper.h" #include "bundle_constants.h" #include "bundle_mgr_interface.h" @@ -24,6 +25,7 @@ #include "ipc_skeleton.h" #include "iservice_registry.h" #include "system_ability_definition.h" +#include "tokenid_kit.h" using namespace OHOS::EventFwk; namespace OHOS { @@ -83,8 +85,24 @@ ReminderEventManager::ReminderEventSubscriber::ReminderEventSubscriber( reminderDataManager_ = reminderDataManager; } +bool ReminderEventManager::ReminderEventSubscriber::CheckCallingPermission() +{ + uint32_t accessToken = IPCSkeleton::GetCallingTokenID(); + auto tokenType = Security::AccessToken::AccessTokenKit::GetTokenTypeFlag(accessToken); + uint64_t fullTokenId = IPCSkeleton::GetCallingFullTokenID(); + bool isSystemApp = Security::AccessToken::TokenIdKit::IsSystemAppByFullTokenID(fullTokenId); + if (tokenType == Security::AccessToken::ATokenTypeEnum::TOKEN_NATIVE || isSystemApp) { + return true; + } + return false; +} + void ReminderEventManager::ReminderEventSubscriber::OnReceiveEvent(const EventFwk::CommonEventData &data) { + if (!CheckCallingPermission()) { + ANSR_LOGW("Don't have calling permission!"); + return; + } Want want = data.GetWant(); std::string action = want.GetAction(); ANSR_LOGI("Recieved common event:%{public}s", action.c_str());