• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "admin_manager.h"
17 
18 #include <algorithm>
19 #include <ctime>
20 #include <fstream>
21 #include <iostream>
22 
23 #include "directory_ex.h"
24 #include "edm_constants.h"
25 #include "edm_log.h"
26 
27 namespace OHOS {
28 namespace EDM {
29 std::shared_ptr<AdminManager> AdminManager::instance_;
30 std::mutex AdminManager::mutexLock_;
31 
GetInstance()32 std::shared_ptr<AdminManager> AdminManager::GetInstance()
33 {
34     if (instance_ == nullptr) {
35         std::lock_guard<std::mutex> autoLock(mutexLock_);
36         if (instance_ == nullptr) {
37             instance_.reset(new (std::nothrow) AdminManager());
38         }
39     }
40     return instance_;
41 }
42 
AdminManager()43 AdminManager::AdminManager()
44 {
45     EDMLOGI("AdminManager::AdminManager");
46 }
47 
~AdminManager()48 AdminManager::~AdminManager()
49 {
50     EDMLOGI("AdminManager::~AdminManager");
51     admins_.clear();
52 }
53 
GetAdminByUserId(int32_t userId,std::vector<std::shared_ptr<Admin>> & userAdmin)54 bool AdminManager::GetAdminByUserId(int32_t userId, std::vector<std::shared_ptr<Admin>> &userAdmin)
55 {
56     userAdmin.clear();
57     auto iter = admins_.find(userId);
58     if (iter == admins_.end()) {
59         EDMLOGW("GetAdminByUserId::get userId Admin failed. userId = %{public}d", userId);
60         return false;
61     }
62     userAdmin = iter->second;
63     return true;
64 }
65 
GetAdminBySubscribeEvent(ManagedEvent event,std::unordered_map<int32_t,std::vector<std::shared_ptr<Admin>>> & subscribeAdmins)66 void AdminManager::GetAdminBySubscribeEvent(ManagedEvent event,
67     std::unordered_map<int32_t, std::vector<std::shared_ptr<Admin>>> &subscribeAdmins)
68 {
69     for (const auto &adminItem : admins_) {
70         std::vector<std::shared_ptr<Admin>> subAdmin;
71         for (const auto &it : adminItem.second) {
72             std::vector<ManagedEvent> events = it->adminInfo_.managedEvents_;
73             if (std::find(events.begin(), events.end(), event) != events.end()) {
74                 subAdmin.push_back(it);
75             }
76         }
77         if (!subAdmin.empty()) {
78             subscribeAdmins[adminItem.first] = subAdmin;
79         }
80     }
81 }
82 
SetAdminValue(int32_t userId,const Admin & adminItem)83 ErrCode AdminManager::SetAdminValue(int32_t userId, const Admin &adminItem)
84 {
85     std::shared_ptr<Admin> getAdmin = GetAdminByPkgName(adminItem.adminInfo_.packageName_, userId);
86     if (getAdmin != nullptr) {
87         return UpdateAdmin(getAdmin, userId, adminItem);
88     }
89     if (!AdminPoliciesStorageRdb::GetInstance()->InsertAdmin(userId, adminItem)) {
90         EDMLOGE("AdminManager::SetAdminValue insert failed.");
91         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
92     }
93     std::vector<std::shared_ptr<Admin>> admins;
94     GetAdminByUserId(userId, admins);
95     std::shared_ptr<Admin> admin = std::make_shared<Admin>(adminItem);
96     admins.emplace_back(admin);
97     admins_[userId] = admins;
98     return ERR_OK;
99 }
100 
GetAdminByPkgName(const std::string & packageName,int32_t userId)101 std::shared_ptr<Admin> AdminManager::GetAdminByPkgName(const std::string &packageName, int32_t userId)
102 {
103     std::shared_ptr<Admin> subOrSuperOrByodAdmin;
104     if (userId != EdmConstants::DEFAULT_USER_ID &&
105         SUCCEEDED(GetSubOrSuperOrByodAdminByPkgName(packageName, subOrSuperOrByodAdmin))) {
106         EDMLOGD("GetAdminByPkgName::get sub-super or super or byod admin: %{public}s", packageName.c_str());
107         return subOrSuperOrByodAdmin;
108     }
109     std::vector<std::shared_ptr<Admin>> userAdmin;
110     if (!GetAdminByUserId(userId, userAdmin)) {
111         EDMLOGW("GetAdminByPkgName::get userId Admin failed. userId = %{public}d", userId);
112         return nullptr;
113     }
114     for (const auto &item : userAdmin) {
115         if (item->adminInfo_.packageName_ == packageName) {
116             return item;
117         }
118     }
119     EDMLOGD("GetAdminByPkgName::get admin failed. admin size = %{public}u, packageName = %{public}s",
120         (uint32_t)userAdmin.size(), packageName.c_str());
121     return nullptr;
122 }
123 
DeleteAdmin(const std::string & packageName,int32_t userId)124 ErrCode AdminManager::DeleteAdmin(const std::string &packageName, int32_t userId)
125 {
126     auto iterMap = admins_.find(userId);
127     if (iterMap == admins_.end()) {
128         EDMLOGW("DeleteAdmin::get userId Admin failed. userId = %{public}d", userId);
129         return ERR_EDM_UNKNOWN_ADMIN;
130     }
131     auto adminPoliciesStorageRdb = AdminPoliciesStorageRdb::GetInstance();
132     if (adminPoliciesStorageRdb == nullptr) {
133         EDMLOGE("AdminManager::DeleteAdmin get adminPoliciesStorageRdb failed.");
134         return ERR_GET_STORAGE_RDB_FAILED;
135     }
136     if (!adminPoliciesStorageRdb->DeleteAdmin(userId, packageName)) {
137         EDMLOGW("delete admin (%{public}s) failed!", packageName.c_str());
138         return ERR_EDM_DEL_ADMIN_FAILED;
139     }
140     auto iter = std::remove_if(iterMap->second.begin(), iterMap->second.end(),
141         [&](std::shared_ptr<Admin> admin) { return admin->adminInfo_.packageName_ == packageName; });
142     iterMap->second.erase(iter, iterMap->second.end());
143     if (iterMap->second.empty()) {
144         admins_.erase(iterMap);
145     }
146     return ERR_OK;
147 }
148 
UpdateAdmin(std::shared_ptr<Admin> getAdmin,int32_t userId,const Admin & adminItem)149 ErrCode AdminManager::UpdateAdmin(std::shared_ptr<Admin> getAdmin, int32_t userId, const Admin &adminItem)
150 {
151     if (getAdmin == nullptr) {
152         EDMLOGW("UpdateAdmin::get null admin, never get here");
153         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
154     }
155     if (getAdmin->GetAdminType() != AdminType::NORMAL && getAdmin->GetAdminType() != adminItem.GetAdminType()) {
156         EDMLOGE("AdminManager::UpdateAdmin sub-super or delegated admin can not update to another type.");
157         return EdmReturnErrCode::ADMIN_EDM_PERMISSION_DENIED;
158     }
159     if (getAdmin->GetAdminType() == AdminType::NORMAL && adminItem.GetAdminType() != AdminType::NORMAL &&
160         adminItem.GetAdminType() != AdminType::ENT) {
161         EDMLOGE("AdminManager::UpdateAdmin normal admin can not update to sub-super admin or delegated admin.");
162         return EdmReturnErrCode::ADMIN_EDM_PERMISSION_DENIED;
163     }
164     if (!AdminPoliciesStorageRdb::GetInstance()->UpdateAdmin(userId, adminItem)) {
165         EDMLOGW("UpdateAdmin::update admin failed.");
166         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
167     }
168     getAdmin->adminInfo_.adminType_ = adminItem.adminInfo_.adminType_;
169     getAdmin->adminInfo_.entInfo_ = adminItem.adminInfo_.entInfo_;
170     getAdmin->adminInfo_.permission_ = adminItem.adminInfo_.permission_;
171     getAdmin->adminInfo_.accessiblePolicies_ = adminItem.adminInfo_.accessiblePolicies_;
172     return ERR_OK;
173 }
174 
175 // success is returned as long as there is a super administrator
IsSuperAdminExist()176 bool AdminManager::IsSuperAdminExist()
177 {
178     std::vector<std::shared_ptr<Admin>> userAdmin;
179     bool ret = GetAdminByUserId(EdmConstants::DEFAULT_USER_ID, userAdmin);
180     if (!ret) {
181         EDMLOGD("IsSuperAdminExist::not find byod or super Admin");
182         return false;
183     }
184     return std::any_of(userAdmin.begin(), userAdmin.end(),
185         [](const std::shared_ptr<Admin> &admin) { return admin->adminInfo_.adminType_ == AdminType::ENT; });
186 }
187 
IsByodAdminExist()188 bool AdminManager::IsByodAdminExist()
189 {
190     std::vector<std::shared_ptr<Admin>> userAdmin;
191     bool ret = GetAdminByUserId(EdmConstants::DEFAULT_USER_ID, userAdmin);
192     if (!ret) {
193         EDMLOGD("IsByodAdminExist::not find byod or super Admin");
194         return false;
195     }
196     return std::any_of(userAdmin.begin(), userAdmin.end(),
197         [](const std::shared_ptr<Admin> &admin) {
198             return admin->adminInfo_.adminType_ == AdminType::BYOD;
199         });
200 }
201 
IsSuperAdmin(const std::string & bundleName)202 bool AdminManager::IsSuperAdmin(const std::string &bundleName)
203 {
204     std::shared_ptr<Admin> admin = GetAdminByPkgName(bundleName, EdmConstants::DEFAULT_USER_ID);
205     if (admin == nullptr) {
206         EDMLOGW("IsSuperAdmin: admin == nullptr.");
207         return false;
208     }
209     if (admin->adminInfo_.adminType_ == AdminType::ENT) {
210         EDMLOGW("IsSuperAdmin: admin->adminInfo_.adminType_ == AdminType::ENT.");
211         return true;
212     }
213     return false;
214 }
215 
IsAdminExist()216 bool AdminManager::IsAdminExist()
217 {
218     return !admins_.empty();
219 }
220 
IsSuperOrSubSuperAdmin(const std::string & bundleName)221 bool AdminManager::IsSuperOrSubSuperAdmin(const std::string &bundleName)
222 {
223     std::shared_ptr<Admin> superAdmin;
224     superAdmin = GetAdminByPkgName(bundleName, EdmConstants::DEFAULT_USER_ID);
225     if (superAdmin == nullptr) {
226         return false;
227     }
228     return superAdmin->adminInfo_.adminType_ == AdminType::ENT ||
229         superAdmin->adminInfo_.adminType_ == AdminType::SUB_SUPER_ADMIN;
230 }
231 
232 /*
233  * There are different administrator types according to the input parameters.
234  * Returns a list of package names
235  */
GetEnabledAdmin(AdminType role,std::vector<std::string> & packageNameList,int32_t userId)236 void AdminManager::GetEnabledAdmin(AdminType role, std::vector<std::string> &packageNameList, int32_t userId)
237 {
238     packageNameList.clear();
239     std::vector<std::shared_ptr<Admin>> userAdmin;
240     bool ret = GetAdminByUserId(userId, userAdmin);
241     if (!ret) {
242         EDMLOGW("GetEnabledAdmin::not find enabled Admin. userId = %{public}d", userId);
243         return;
244     }
245     EDMLOGD("AdminManager:GetEnabledAdmin adminType: %{public}d , admin size: %{public}zu", role, userAdmin.size());
246     if (static_cast<int32_t>(role) > static_cast<int32_t>(AdminType::BYOD) ||
247         static_cast<int32_t>(role) < static_cast<int32_t>(AdminType::NORMAL)) {
248         EDMLOGD("there is no admin(%{public}u) device manager package name list!", role);
249         return;
250     }
251 
252     for (const auto &item : userAdmin) {
253         if (item->adminInfo_.adminType_ == role) {
254             std::string adminName = item->adminInfo_.packageName_ + "/" + item->adminInfo_.className_;
255             packageNameList.push_back(adminName);
256         }
257     }
258 }
259 
GetSubOrSuperOrByodAdminByPkgName(const std::string & subAdminName,std::shared_ptr<Admin> & subOrSuperOrByodAdmin)260 ErrCode AdminManager::GetSubOrSuperOrByodAdminByPkgName(const std::string &subAdminName,
261     std::shared_ptr<Admin> &subOrSuperOrByodAdmin)
262 {
263     std::vector<std::shared_ptr<Admin>> userAdmin;
264     if (!GetAdminByUserId(EdmConstants::DEFAULT_USER_ID, userAdmin)) {
265         EDMLOGW("GetSubOrSuperOrByodAdminByPkgName::not find Admin under default user id");
266         return ERR_EDM_SUPER_ADMIN_NOT_FOUND;
267     }
268     auto adminItem = std::find_if(userAdmin.begin(), userAdmin.end(), [&](const std::shared_ptr<Admin> &admin) {
269         return admin->adminInfo_.packageName_ == subAdminName && (admin->GetAdminType() == AdminType::ENT ||
270             admin->GetAdminType() == AdminType::SUB_SUPER_ADMIN || admin->GetAdminType() == AdminType::VIRTUAL_ADMIN ||
271             admin->GetAdminType() == AdminType::BYOD);
272     });
273     if (adminItem == userAdmin.end()) {
274         EDMLOGW("GetSubOrSuperOrByodAdminByPkgName::not find sub-super admin or super or byod Admin");
275         return ERR_EDM_SUPER_ADMIN_NOT_FOUND;
276     }
277     subOrSuperOrByodAdmin = *adminItem;
278     return ERR_OK;
279 }
280 
GetAdmins(std::vector<std::shared_ptr<Admin>> & admins,int32_t currentUserId)281 void AdminManager::GetAdmins(std::vector<std::shared_ptr<Admin>> &admins, int32_t currentUserId)
282 {
283     std::vector<std::shared_ptr<Admin>> userAdmin;
284     GetAdminByUserId(EdmConstants::DEFAULT_USER_ID, userAdmin);
285     std::copy_if(userAdmin.begin(), userAdmin.end(), std::back_inserter(admins), [&](std::shared_ptr<Admin> admin) {
286         return admin->adminInfo_.adminType_ == AdminType::ENT || admin->adminInfo_.adminType_ == AdminType::BYOD;
287     });
288     GetAdminByUserId(currentUserId, userAdmin);
289     std::copy_if(userAdmin.begin(), userAdmin.end(), std::back_inserter(admins), [&](std::shared_ptr<Admin> admin) {
290         return admin->adminInfo_.adminType_ == AdminType::NORMAL;
291     });
292 }
293 
GetSubSuperAdminsByParentName(const std::string & parentName,std::vector<std::string> & subAdmins)294 ErrCode AdminManager::GetSubSuperAdminsByParentName(const std::string &parentName, std::vector<std::string> &subAdmins)
295 {
296     if (subAdmins.size() > 0) {
297         subAdmins.clear();
298     }
299     std::vector<std::shared_ptr<Admin>> userAdmin;
300     if (!GetAdminByUserId(EdmConstants::DEFAULT_USER_ID, userAdmin)) {
301         EDMLOGE("GetSubSuperAdminsByParentName::not find Admin under default user id.");
302         return ERR_EDM_SUPER_ADMIN_NOT_FOUND;
303     }
304     for (const auto &admin : userAdmin) {
305         if ((admin->GetAdminType() == AdminType::SUB_SUPER_ADMIN ||
306             admin->GetAdminType() == AdminType::VIRTUAL_ADMIN) &&
307             admin->GetParentAdminName() == parentName) {
308             subAdmins.push_back(admin->adminInfo_.packageName_);
309         }
310     }
311     return ERR_OK;
312 }
313 
GetEntInfo(const std::string & packageName,EntInfo & entInfo,int32_t userId)314 ErrCode AdminManager::GetEntInfo(const std::string &packageName, EntInfo &entInfo, int32_t userId)
315 {
316     std::vector<std::shared_ptr<Admin>> userAdmin;
317     bool ret = GetAdminByUserId(userId, userAdmin);
318     if (!ret) {
319         EDMLOGW("GetEntInfo::not find Admin. userId = %{public}d", userId);
320         return ERR_EDM_UNKNOWN_ADMIN;
321     }
322     for (const auto &item : userAdmin) {
323         if (item->adminInfo_.packageName_ == packageName) {
324             entInfo = item->adminInfo_.entInfo_;
325             return ERR_OK;
326         }
327     }
328     return ERR_EDM_UNKNOWN_ADMIN;
329 }
330 
SetEntInfo(const std::string & packageName,EntInfo & entInfo,int32_t userId)331 ErrCode AdminManager::SetEntInfo(const std::string &packageName, EntInfo &entInfo, int32_t userId)
332 {
333     std::vector<std::shared_ptr<Admin>> userAdmin;
334     bool ret = GetAdminByUserId(userId, userAdmin);
335     if (!ret) {
336         EDMLOGW("SetEntInfo::not find Admin. userId = %{public}d", userId);
337         return ERR_EDM_UNKNOWN_ADMIN;
338     }
339     auto adminPoliciesStorageRdb = AdminPoliciesStorageRdb::GetInstance();
340     if (adminPoliciesStorageRdb == nullptr) {
341         EDMLOGE("AdminManager::SetEntInfo get adminPoliciesStorageRdb failed.");
342         return ERR_GET_STORAGE_RDB_FAILED;
343     }
344     for (auto &item : userAdmin) {
345         if (item->adminInfo_.packageName_ == packageName &&
346             adminPoliciesStorageRdb->UpdateEntInfo(userId, packageName, entInfo)) {
347             item->adminInfo_.entInfo_ = entInfo;
348             return ERR_OK;
349         }
350     }
351     return ERR_EDM_UNKNOWN_ADMIN;
352 }
353 
SaveSubscribeEvents(const std::vector<uint32_t> & events,const std::string & bundleName,int32_t userId)354 ErrCode AdminManager::SaveSubscribeEvents(const std::vector<uint32_t> &events, const std::string &bundleName,
355     int32_t userId)
356 {
357     std::shared_ptr<Admin> admin = GetAdminByPkgName(bundleName, userId);
358     if (admin == nullptr) {
359         return ERR_EDM_UNKNOWN_ADMIN;
360     }
361     auto adminPoliciesStorageRdb = AdminPoliciesStorageRdb::GetInstance();
362     if (adminPoliciesStorageRdb == nullptr) {
363         EDMLOGE("AdminManager::SaveSubscribeEvents get adminPoliciesStorageRdb failed.");
364         return ERR_GET_STORAGE_RDB_FAILED;
365     }
366     std::vector<ManagedEvent> oldManagedEvents = admin->adminInfo_.managedEvents_;
367     size_t eventsNumber = admin->adminInfo_.managedEvents_.size();
368     for (const auto &event : events) {
369         std::vector<ManagedEvent> managedEvents = admin->adminInfo_.managedEvents_;
370         ManagedEvent subEvent = static_cast<ManagedEvent>(event);
371         if (std::find(managedEvents.begin(), managedEvents.end(), subEvent) == managedEvents.end()) {
372             admin->adminInfo_.managedEvents_.push_back(subEvent);
373         }
374     }
375     if (admin->adminInfo_.managedEvents_.size() > eventsNumber &&
376         !adminPoliciesStorageRdb->UpdateManagedEvents(userId, admin->adminInfo_.packageName_,
377             admin->adminInfo_.managedEvents_)) {
378         admin->adminInfo_.managedEvents_ = oldManagedEvents;
379         return ERR_EDM_UNKNOWN_ADMIN;
380     }
381     return ERR_OK;
382 }
383 
RemoveSubscribeEvents(const std::vector<uint32_t> & events,const std::string & bundleName,int32_t userId)384 ErrCode AdminManager::RemoveSubscribeEvents(const std::vector<uint32_t> &events, const std::string &bundleName,
385     int32_t userId)
386 {
387     std::shared_ptr<Admin> admin = GetAdminByPkgName(bundleName, userId);
388     if (admin == nullptr) {
389         return ERR_EDM_UNKNOWN_ADMIN;
390     }
391     auto adminPoliciesStorageRdb = AdminPoliciesStorageRdb::GetInstance();
392     if (adminPoliciesStorageRdb == nullptr) {
393         EDMLOGE("AdminManager::RemoveSubscribeEvents get adminPoliciesStorageRdb failed.");
394         return ERR_GET_STORAGE_RDB_FAILED;
395     }
396 
397     std::vector<ManagedEvent> oldManagedEvents = admin->adminInfo_.managedEvents_;
398     size_t eventsNumber = admin->adminInfo_.managedEvents_.size();
399     auto iter = std::remove_if(admin->adminInfo_.managedEvents_.begin(), admin->adminInfo_.managedEvents_.end(),
400         [&](ManagedEvent managedEvent) {
401             return std::find(events.begin(), events.end(), static_cast<uint32_t>(managedEvent)) != events.end();
402         });
403     admin->adminInfo_.managedEvents_.erase(iter, admin->adminInfo_.managedEvents_.end());
404 
405     if (admin->adminInfo_.managedEvents_.size() < eventsNumber &&
406         !adminPoliciesStorageRdb->UpdateManagedEvents(userId, admin->adminInfo_.packageName_,
407             admin->adminInfo_.managedEvents_)) {
408         admin->adminInfo_.managedEvents_ = oldManagedEvents;
409         return ERR_EDM_UNKNOWN_ADMIN;
410     }
411     return ERR_OK;
412 }
413 
GetPoliciesByVirtualAdmin(const std::string & bundleName,const std::string & parentName,std::vector<std::string> & policies)414 ErrCode AdminManager::GetPoliciesByVirtualAdmin(const std::string &bundleName, const std::string &parentName,
415     std::vector<std::string> &policies)
416 {
417     policies.clear();
418     std::shared_ptr<Admin> virtualAdmin = GetAdminByPkgName(bundleName, EdmConstants::DEFAULT_USER_ID);
419     if (virtualAdmin == nullptr) {
420         return EdmReturnErrCode::PARAM_ERROR;
421     }
422     if (virtualAdmin->GetAdminType() != AdminType::VIRTUAL_ADMIN || virtualAdmin->GetParentAdminName() != parentName) {
423         EDMLOGE("GetPoliciesByVirtualAdmin the administrator does not have permission to get delegated policies.");
424         return EdmReturnErrCode::ADMIN_EDM_PERMISSION_DENIED;
425     }
426     policies = virtualAdmin->adminInfo_.accessiblePolicies_;
427     return ERR_OK;
428 }
429 
GetVirtualAdminsByPolicy(const std::string & policyName,const std::string & parentName,std::vector<std::string> & bundleNames)430 void AdminManager::GetVirtualAdminsByPolicy(const std::string &policyName, const std::string &parentName,
431     std::vector<std::string> &bundleNames)
432 {
433     bundleNames.clear();
434     std::vector<std::shared_ptr<Admin>> admins;
435     GetAdminByUserId(EdmConstants::DEFAULT_USER_ID, admins);
436     for (auto adminItem : admins) {
437         if (adminItem->GetAdminType() != AdminType::VIRTUAL_ADMIN || adminItem->GetParentAdminName() != parentName) {
438             continue;
439         }
440         auto policies = adminItem->adminInfo_.accessiblePolicies_;
441         if (std::find(policies.begin(), policies.end(), policyName) != policies.end()) {
442             bundleNames.emplace_back(adminItem->adminInfo_.packageName_);
443         }
444     }
445 }
446 
HasPermissionToHandlePolicy(std::shared_ptr<Admin> admin,const std::string & policyName)447 bool AdminManager::HasPermissionToHandlePolicy(std::shared_ptr<Admin> admin, const std::string &policyName)
448 {
449     if (admin->GetAdminType() != AdminType::VIRTUAL_ADMIN) {
450         return true;
451     }
452     auto policies = admin->adminInfo_.accessiblePolicies_;
453     return std::find(policies.begin(), policies.end(), policyName) != policies.end();
454 }
455 
GetSuperAdmin()456 std::shared_ptr<Admin> AdminManager::GetSuperAdmin()
457 {
458     if (admins_.find(EdmConstants::DEFAULT_USER_ID) != admins_.end()) {
459         auto item = std::find_if(admins_[EdmConstants::DEFAULT_USER_ID].begin(),
460             admins_[EdmConstants::DEFAULT_USER_ID].end(),
461             [&](const std::shared_ptr<Admin>& admin) { return admin->GetAdminType() == AdminType::ENT; });
462         if (item != admins_[EdmConstants::DEFAULT_USER_ID].end()) {
463             return *item;
464         }
465     }
466     return nullptr;
467 }
468 
469 // init
Init()470 void AdminManager::Init()
471 {
472     auto adminPoliciesStorageRdb = AdminPoliciesStorageRdb::GetInstance();
473     if (adminPoliciesStorageRdb != nullptr) {
474         admins_ = adminPoliciesStorageRdb->QueryAllAdmin();
475     } else {
476         EDMLOGE("AdminManager::Init failed.");
477     }
478 }
479 
Dump()480 void AdminManager::Dump()
481 {
482     for (const auto &entry : admins_) {
483         EDMLOGI("AdminManager::Dump %{public}d.", entry.first);
484         for (const auto &admin : entry.second) {
485             EDMLOGI("AdminManager::Dump admin info adminType_ %{public}d.",
486                 admin->adminInfo_.adminType_);
487             EDMLOGI("AdminManager::Dump admin info packageName_ %{public}s.",
488                 admin->adminInfo_.packageName_.c_str());
489             EDMLOGI("AdminManager::Dump admin info parentAdminName_ %{public}s.",
490                 admin->adminInfo_.parentAdminName_.c_str());
491         }
492     }
493 }
494 } // namespace EDM
495 } // namespace OHOS
496