diff --git a/bundle.json b/bundle.json index 8187650edef4e9e7977dedc40aca4cbf64d6edb5..49e335ea383be3ed415cf03a7514afaf6b12aeff 100644 --- a/bundle.json +++ b/bundle.json @@ -16,12 +16,12 @@ "ram": "~4096KB", "deps": { "components": [ + "access_token", "hiviewdfx_hilog_native", "ipc", "safwk", "samgr_standard", "utils_base", - "permission_standard", "napi", "hisysevent_native", "vibrator_device_driver" diff --git a/interfaces/plugin/vibrator/test/unittest/config.json b/interfaces/plugin/vibrator/test/unittest/config.json old mode 100755 new mode 100644 index 2ca858952259de571e07105b05eca8eaed0d7db4..cff58d3215d7b0963c5dcc3049883d057d9d34c6 --- a/interfaces/plugin/vibrator/test/unittest/config.json +++ b/interfaces/plugin/vibrator/test/unittest/config.json @@ -23,6 +23,18 @@ "moduleName": "entry", "moduleType": "entry" }, + "reqPermissions": [ + { + "name": "ohos.permission.VIBRATE", + "reason": "", + "usedScene": { + "ability": [ + ".MainAbility" + ], + "when": "inuse" + } + } + ], "abilities": [ { "visible": true, diff --git a/services/miscdevice_service/BUILD.gn b/services/miscdevice_service/BUILD.gn index e8b9874c3d0d6a69229ccbd99d96b20743a6133f..f44b533c28ba6643145c6d3f16f4e03d63be3b98 100644 --- a/services/miscdevice_service/BUILD.gn +++ b/services/miscdevice_service/BUILD.gn @@ -40,9 +40,9 @@ ohos_shared_library("libmiscdevice_service") { ] external_deps = [ + "access_token:libaccesstoken_sdk", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", - "permission_standard:libpermissionsdk_standard", "safwk:system_ability_fwk", "samgr_standard:samgr_proxy", "utils_base:utils", diff --git a/services/miscdevice_service/src/miscdevice_service_stub.cpp b/services/miscdevice_service/src/miscdevice_service_stub.cpp old mode 100755 new mode 100644 index a3d6026f1b6c2fb59c1c2625c3bedcd2041e27dc..3eebdb8a1223e3d25fc755299ae59fc17ea5875e --- a/services/miscdevice_service/src/miscdevice_service_stub.cpp +++ b/services/miscdevice_service/src/miscdevice_service_stub.cpp @@ -21,6 +21,7 @@ #include "ipc_skeleton.h" #include "message_parcel.h" +#include "permission_util.h" #include "sensors_errors.h" #include "sensors_log_domain.h" @@ -76,6 +77,11 @@ int32_t MiscdeviceServiceStub::IsVibratorEffectAvailablePb(MessageParcel &data, int32_t MiscdeviceServiceStub::VibratePb(MessageParcel &data, MessageParcel &reply) { + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.CheckVibratePermission(this->GetCallingTokenID(), VIBRATE_PERMISSION)) { + HiLog::Error(LABEL, "%{public}s permission denied", __func__); + return ERR_PERMISSION_DENIED; + } return Vibrate(data.ReadInt32(), data.ReadUint32()); } @@ -89,12 +95,22 @@ int32_t MiscdeviceServiceStub::GetVibratorIdListPb(MessageParcel &data, MessageP int32_t MiscdeviceServiceStub::CancelVibratorPb(MessageParcel &data, MessageParcel &reply) { + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.CheckVibratePermission(this->GetCallingTokenID(), VIBRATE_PERMISSION)) { + HiLog::Error(LABEL, "%{public}s permission denied", __func__); + return ERR_PERMISSION_DENIED; + } int32_t vibratorId = data.ReadInt32(); return CancelVibrator(vibratorId); } int32_t MiscdeviceServiceStub::PlayVibratorEffectPb(MessageParcel &data, MessageParcel &reply) { + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.CheckVibratePermission(this->GetCallingTokenID(), VIBRATE_PERMISSION)) { + HiLog::Error(LABEL, "%{public}s permission denied", __func__); + return ERR_PERMISSION_DENIED; + } int32_t vibratorId = data.ReadInt32(); std::string effectType = data.ReadString(); bool isLooping = data.ReadBool(); @@ -103,6 +119,11 @@ int32_t MiscdeviceServiceStub::PlayVibratorEffectPb(MessageParcel &data, Message int32_t MiscdeviceServiceStub::PlayCustomVibratorEffectPb(MessageParcel &data, MessageParcel &reply) { + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.CheckVibratePermission(this->GetCallingTokenID(), VIBRATE_PERMISSION)) { + HiLog::Error(LABEL, "%{public}s permission denied", __func__); + return ERR_PERMISSION_DENIED; + } int32_t vibratorId = data.ReadInt32(); std::vector timing; data.ReadInt32Vector(&timing); @@ -114,6 +135,11 @@ int32_t MiscdeviceServiceStub::PlayCustomVibratorEffectPb(MessageParcel &data, M int32_t MiscdeviceServiceStub::StopVibratorEffectPb(MessageParcel &data, MessageParcel &reply) { + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.CheckVibratePermission(this->GetCallingTokenID(), VIBRATE_PERMISSION)) { + HiLog::Error(LABEL, "%{public}s permission denied", __func__); + return ERR_PERMISSION_DENIED; + } int32_t vibratorId = data.ReadInt32(); std::string effectType = data.ReadString(); return StopVibratorEffect(vibratorId, effectType); @@ -121,6 +147,11 @@ int32_t MiscdeviceServiceStub::StopVibratorEffectPb(MessageParcel &data, Message int32_t MiscdeviceServiceStub::SetVibratorParameterPb(MessageParcel &data, MessageParcel &reply) { + PermissionUtil &permissionUtil = PermissionUtil::GetInstance(); + if (!permissionUtil.CheckVibratePermission(this->GetCallingTokenID(), VIBRATE_PERMISSION)) { + HiLog::Error(LABEL, "%{public}s permission denied", __func__); + return ERR_PERMISSION_DENIED; + } int32_t vibratorId = data.ReadInt32(); std::string cmd = data.ReadString(); return SetVibratorParameter(vibratorId, cmd); diff --git a/utils/BUILD.gn b/utils/BUILD.gn index 992117b3dee7530e5ff5f4c838e07dab5ca5d803..37b9936456a3aeb31329cd4600e3b9f166e9f1b1 100644 --- a/utils/BUILD.gn +++ b/utils/BUILD.gn @@ -16,6 +16,7 @@ ohos_shared_library("libmiscdevice_utils") { sources = [ "src/dmd_report.cpp", "src/miscdevice_common.cpp", + "src/permission_util.cpp", ] include_dirs = [ @@ -25,6 +26,7 @@ ohos_shared_library("libmiscdevice_utils") { ] external_deps = [ + "access_token:libaccesstoken_sdk", "hisysevent_native:libhisysevent", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", diff --git a/utils/include/permission_util.h b/utils/include/permission_util.h new file mode 100644 index 0000000000000000000000000000000000000000..ef3804eeb107adf3cbf6d0690eb99bfaf7292efb --- /dev/null +++ b/utils/include/permission_util.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef PERMISSION_UTIL_H +#define PERMISSION_UTIL_H + +#include +#include +#include +#include "accesstoken_kit.h" +#include "refbase.h" +#include "singleton.h" + +namespace OHOS { +namespace Sensors { +using namespace Security::AccessToken; +class PermissionUtil : public Singleton { +public: + PermissionUtil() = default; + virtual ~PermissionUtil() {}; + bool CheckVibratePermission(AccessTokenID callerToken, std::string permissionName); + +private: +}; +} // namespace Sensors +} // namespace OHOS +#endif // PERMISSION_UTIL_H diff --git a/utils/src/permission_util.cpp b/utils/src/permission_util.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9337c94eea1e3cc516c5b83ae379d6cb811021a5 --- /dev/null +++ b/utils/src/permission_util.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "permission_util.h" + +#include +#include "sensors_errors.h" +#include "sensors_log_domain.h" + +namespace OHOS { +namespace Sensors { +using namespace OHOS::HiviewDFX; + +namespace { +constexpr HiLogLabel LABEL = { LOG_CORE, SensorsLogDomain::SENSOR_UTILS, "PermissionUtil" }; +} // namespace + +bool PermissionUtil::CheckVibratePermission(AccessTokenID callerToken, std::string permissionName) +{ + int32_t result = AccessTokenKit::VerifyAccessToken(callerToken, permissionName); + if (result != PERMISSION_GRANTED) { + HiLog::Error(LABEL, "%{public}s grant failed, result: %{public}d", __func__, result); + return false; + } + HiLog::Debug(LABEL, "%{public}s grant success", __func__); + return true; +} +} // namespace Sensors +} // namespace OHOS