1f7a47986Sopenharmony_ci/* 2f7a47986Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3f7a47986Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f7a47986Sopenharmony_ci * you may not use this file except in compliance with the License. 5f7a47986Sopenharmony_ci * You may obtain a copy of the License at 6f7a47986Sopenharmony_ci * 7f7a47986Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f7a47986Sopenharmony_ci * 9f7a47986Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f7a47986Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f7a47986Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f7a47986Sopenharmony_ci * See the License for the specific language governing permissions and 13f7a47986Sopenharmony_ci * limitations under the License. 14f7a47986Sopenharmony_ci */ 15f7a47986Sopenharmony_ci 16f7a47986Sopenharmony_ci#include "permission_manager.h" 17f7a47986Sopenharmony_ci#include "edm_log.h" 18f7a47986Sopenharmony_ci 19f7a47986Sopenharmony_cinamespace OHOS { 20f7a47986Sopenharmony_cinamespace EDM { 21f7a47986Sopenharmony_ciPermissionManager::PermissionManager() {} 22f7a47986Sopenharmony_ci 23f7a47986Sopenharmony_ciPermissionManager::~PermissionManager() 24f7a47986Sopenharmony_ci{ 25f7a47986Sopenharmony_ci permissions_.clear(); 26f7a47986Sopenharmony_ci} 27f7a47986Sopenharmony_ci 28f7a47986Sopenharmony_ciErrCode PermissionManager::AddPermission(const std::string &permission, IPlugin::PermissionType permissionType) 29f7a47986Sopenharmony_ci{ 30f7a47986Sopenharmony_ci if (permission.empty()) { 31f7a47986Sopenharmony_ci return ERR_OK; 32f7a47986Sopenharmony_ci } 33f7a47986Sopenharmony_ci if (static_cast<std::int32_t>(permissionType) < 34f7a47986Sopenharmony_ci static_cast<std::int32_t>(IPlugin::PermissionType::NORMAL_DEVICE_ADMIN) || 35f7a47986Sopenharmony_ci static_cast<std::int32_t>(permissionType) >= static_cast<std::int32_t>(IPlugin::PermissionType::UNKNOWN)) { 36f7a47986Sopenharmony_ci EDMLOGE("AddPermission::unknow permission type"); 37f7a47986Sopenharmony_ci return ERR_EDM_UNKNOWN_PERMISSION; 38f7a47986Sopenharmony_ci } 39f7a47986Sopenharmony_ci auto entry = permissions_.find(permission); 40f7a47986Sopenharmony_ci if (entry == permissions_.end()) { 41f7a47986Sopenharmony_ci AdminPermission adminPermission(permission, static_cast<AdminType>(permissionType)); 42f7a47986Sopenharmony_ci permissions_.insert(std::make_pair(permission, adminPermission)); 43f7a47986Sopenharmony_ci EDMLOGI("AddPermission::insert permission : %{public}s permissionType : %{public}d", 44f7a47986Sopenharmony_ci permission.c_str(), static_cast<int32_t>(permissionType)); 45f7a47986Sopenharmony_ci } else if (entry->second.adminType != static_cast<AdminType>(permissionType)) { 46f7a47986Sopenharmony_ci EDMLOGE("AddPermission::conflict permission type"); 47f7a47986Sopenharmony_ci return ERR_EDM_DENY_PERMISSION; 48f7a47986Sopenharmony_ci } else { 49f7a47986Sopenharmony_ci EDMLOGI("AddPermission::same permission has been added : %{public}s", permission.c_str()); 50f7a47986Sopenharmony_ci } 51f7a47986Sopenharmony_ci EDMLOGD("AddPermission::return ok"); 52f7a47986Sopenharmony_ci return ERR_OK; 53f7a47986Sopenharmony_ci} 54f7a47986Sopenharmony_ci 55f7a47986Sopenharmony_civoid PermissionManager::GetReqPermission(const std::vector<std::string> &permissions, 56f7a47986Sopenharmony_ci std::vector<AdminPermission> &reqPermission) 57f7a47986Sopenharmony_ci{ 58f7a47986Sopenharmony_ci reqPermission.clear(); 59f7a47986Sopenharmony_ci if (permissions.empty()) { 60f7a47986Sopenharmony_ci return; 61f7a47986Sopenharmony_ci } 62f7a47986Sopenharmony_ci 63f7a47986Sopenharmony_ci for (const auto &item : permissions) { 64f7a47986Sopenharmony_ci auto entry = permissions_.find(item); 65f7a47986Sopenharmony_ci if (entry != permissions_.end()) { 66f7a47986Sopenharmony_ci reqPermission.emplace_back(entry->second); 67f7a47986Sopenharmony_ci } 68f7a47986Sopenharmony_ci } 69f7a47986Sopenharmony_ci} 70f7a47986Sopenharmony_ci 71f7a47986Sopenharmony_civoid PermissionManager::GetReqPermission(const std::vector<std::string> &permissions, 72f7a47986Sopenharmony_ci std::vector<EdmPermission> &reqPermission) 73f7a47986Sopenharmony_ci{ 74f7a47986Sopenharmony_ci reqPermission.clear(); 75f7a47986Sopenharmony_ci for (const auto &item : permissions) { 76f7a47986Sopenharmony_ci auto entry = permissions_.find(item); 77f7a47986Sopenharmony_ci if (entry != permissions_.end()) { 78f7a47986Sopenharmony_ci EdmPermission edmPermission(entry->second.permissionName, entry->second.adminType); 79f7a47986Sopenharmony_ci reqPermission.emplace_back(edmPermission); 80f7a47986Sopenharmony_ci } 81f7a47986Sopenharmony_ci } 82f7a47986Sopenharmony_ci} 83f7a47986Sopenharmony_ci} // namespace EDM 84f7a47986Sopenharmony_ci} // namespace OHOS 85