1f7a47986Sopenharmony_ci/* 2f7a47986Sopenharmony_ci * Copyright (c) 2022-2024 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 "policy_manager.h" 17f7a47986Sopenharmony_ci#include <algorithm> 18f7a47986Sopenharmony_ci#include <ctime> 19f7a47986Sopenharmony_ci#include <fstream> 20f7a47986Sopenharmony_ci#include <unistd.h> 21f7a47986Sopenharmony_ci#include "directory_ex.h" 22f7a47986Sopenharmony_ci#include "edm_log.h" 23f7a47986Sopenharmony_ci 24f7a47986Sopenharmony_cinamespace OHOS { 25f7a47986Sopenharmony_cinamespace EDM { 26f7a47986Sopenharmony_ci 27f7a47986Sopenharmony_ciErrCode PolicyManager::GetAdminByPolicyName(const std::string &policyName, AdminValueItemsMap &adminValueItems, 28f7a47986Sopenharmony_ci int32_t userId) 29f7a47986Sopenharmony_ci{ 30f7a47986Sopenharmony_ci auto userPolicyMgr = GetUserPolicyMgr(userId); 31f7a47986Sopenharmony_ci return userPolicyMgr->GetAdminByPolicyName(policyName, adminValueItems); 32f7a47986Sopenharmony_ci} 33f7a47986Sopenharmony_ci 34f7a47986Sopenharmony_ciErrCode PolicyManager::GetPolicy(const std::string &adminName, const std::string &policyName, std::string &policyValue, 35f7a47986Sopenharmony_ci int32_t userId) 36f7a47986Sopenharmony_ci{ 37f7a47986Sopenharmony_ci auto userPolicyMgr = GetUserPolicyMgr(userId); 38f7a47986Sopenharmony_ci return userPolicyMgr->GetPolicy(adminName, policyName, policyValue); 39f7a47986Sopenharmony_ci} 40f7a47986Sopenharmony_ci 41f7a47986Sopenharmony_civoid PolicyManager::Init(std::vector<int32_t> userIds) 42f7a47986Sopenharmony_ci{ 43f7a47986Sopenharmony_ci for (auto userId : userIds) { 44f7a47986Sopenharmony_ci EDMLOGI("PolicyManager::Init userId %{public}d", userId); 45f7a47986Sopenharmony_ci if (userId == EdmConstants::DEFAULT_USER_ID) { 46f7a47986Sopenharmony_ci defaultPolicyMgr_ = std::make_shared<UserPolicyManager>(userId); 47f7a47986Sopenharmony_ci defaultPolicyMgr_->Init(); 48f7a47986Sopenharmony_ci } else { 49f7a47986Sopenharmony_ci std::shared_ptr<UserPolicyManager> userPolicyMgr = std::make_shared<UserPolicyManager>(userId); 50f7a47986Sopenharmony_ci userPolicyMgr->Init(); 51f7a47986Sopenharmony_ci policyMgrMap_.insert(std::make_pair(userId, userPolicyMgr)); 52f7a47986Sopenharmony_ci } 53f7a47986Sopenharmony_ci } 54f7a47986Sopenharmony_ci return; 55f7a47986Sopenharmony_ci} 56f7a47986Sopenharmony_ci 57f7a47986Sopenharmony_ciErrCode PolicyManager::SetPolicy(const std::string &adminName, const std::string &policyName, 58f7a47986Sopenharmony_ci const std::string &adminPolicyValue, const std::string &mergedPolicyValue, 59f7a47986Sopenharmony_ci int32_t userId) 60f7a47986Sopenharmony_ci{ 61f7a47986Sopenharmony_ci auto userPolicyMgr = GetUserPolicyMgr(userId); 62f7a47986Sopenharmony_ci return userPolicyMgr->SetPolicy(adminName, policyName, adminPolicyValue, mergedPolicyValue); 63f7a47986Sopenharmony_ci} 64f7a47986Sopenharmony_ci 65f7a47986Sopenharmony_ciErrCode PolicyManager::GetAllPolicyByAdmin(const std::string &adminName, PolicyItemsMap &allAdminPolicy, 66f7a47986Sopenharmony_ci int32_t userId) 67f7a47986Sopenharmony_ci{ 68f7a47986Sopenharmony_ci auto userPolicyMgr = GetUserPolicyMgr(userId); 69f7a47986Sopenharmony_ci return userPolicyMgr->GetAllPolicyByAdmin(adminName, allAdminPolicy); 70f7a47986Sopenharmony_ci} 71f7a47986Sopenharmony_ci 72f7a47986Sopenharmony_cistd::shared_ptr<UserPolicyManager> PolicyManager::GetUserPolicyMgr(int32_t userId) 73f7a47986Sopenharmony_ci{ 74f7a47986Sopenharmony_ci EDMLOGD("PolicyManager::GetUserPolicyMgr by userId:%{public}d", userId); 75f7a47986Sopenharmony_ci if (userId == EdmConstants::DEFAULT_USER_ID) { 76f7a47986Sopenharmony_ci if (defaultPolicyMgr_ == nullptr) { 77f7a47986Sopenharmony_ci defaultPolicyMgr_ = std::make_shared<UserPolicyManager>(userId); 78f7a47986Sopenharmony_ci defaultPolicyMgr_->Init(); 79f7a47986Sopenharmony_ci } 80f7a47986Sopenharmony_ci return defaultPolicyMgr_; 81f7a47986Sopenharmony_ci } else { 82f7a47986Sopenharmony_ci auto itr = policyMgrMap_.find(userId); 83f7a47986Sopenharmony_ci if (itr != policyMgrMap_.end()) { 84f7a47986Sopenharmony_ci return itr->second; 85f7a47986Sopenharmony_ci } else { 86f7a47986Sopenharmony_ci std::shared_ptr<UserPolicyManager> userPolicyMgr = std::make_shared<UserPolicyManager>(userId); 87f7a47986Sopenharmony_ci userPolicyMgr->Init(); 88f7a47986Sopenharmony_ci policyMgrMap_.insert(std::make_pair(userId, userPolicyMgr)); 89f7a47986Sopenharmony_ci return userPolicyMgr; 90f7a47986Sopenharmony_ci } 91f7a47986Sopenharmony_ci } 92f7a47986Sopenharmony_ci} 93f7a47986Sopenharmony_ci 94f7a47986Sopenharmony_civoid PolicyManager::GetPolicyUserIds(std::vector<int32_t> &userIds) 95f7a47986Sopenharmony_ci{ 96f7a47986Sopenharmony_ci for (const auto& pair : policyMgrMap_) { 97f7a47986Sopenharmony_ci userIds.push_back(pair.first); 98f7a47986Sopenharmony_ci } 99f7a47986Sopenharmony_ci} 100f7a47986Sopenharmony_ci 101f7a47986Sopenharmony_civoid PolicyManager::Dump() 102f7a47986Sopenharmony_ci{ 103f7a47986Sopenharmony_ci auto defaultUserPolicyMgr = GetUserPolicyMgr(EdmConstants::DEFAULT_USER_ID); 104f7a47986Sopenharmony_ci defaultUserPolicyMgr->DumpAdminPolicy(); 105f7a47986Sopenharmony_ci defaultUserPolicyMgr->DumpAdminList(); 106f7a47986Sopenharmony_ci defaultUserPolicyMgr->DumpCombinedPolicy(); 107f7a47986Sopenharmony_ci 108f7a47986Sopenharmony_ci std::vector<int32_t> userIds; 109f7a47986Sopenharmony_ci GetPolicyUserIds(userIds); 110f7a47986Sopenharmony_ci EDMLOGD("PolicyManager::Dump userIds size:%{public}zu", userIds.size()); 111f7a47986Sopenharmony_ci for (auto userId : userIds) { 112f7a47986Sopenharmony_ci auto userPolicyMgr = GetUserPolicyMgr(userId); 113f7a47986Sopenharmony_ci userPolicyMgr->DumpAdminPolicy(); 114f7a47986Sopenharmony_ci userPolicyMgr->DumpAdminList(); 115f7a47986Sopenharmony_ci userPolicyMgr->DumpCombinedPolicy(); 116f7a47986Sopenharmony_ci } 117f7a47986Sopenharmony_ci} 118f7a47986Sopenharmony_ci} // namespace EDM 119f7a47986Sopenharmony_ci} // namespace OHOS 120