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