• 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_policies_storage_rdb.h"
17 
18 #include "cjson_check.h"
19 #include "edm_constants.h"
20 #include "edm_log.h"
21 #include "edm_rdb_filed_const.h"
22 
23 namespace OHOS {
24 namespace EDM {
25 std::shared_ptr<AdminPoliciesStorageRdb> AdminPoliciesStorageRdb::instance_ = nullptr;
26 std::once_flag AdminPoliciesStorageRdb::flag_;
27 bool AdminPoliciesStorageRdb::isAdminPoliciesTableInit_ = false;
28 
AdminPoliciesStorageRdb()29 AdminPoliciesStorageRdb::AdminPoliciesStorageRdb()
30 {
31     EDMLOGD("AdminPoliciesStorageRdb::create database.");
32 }
33 
CreateAdminPoliciesTable()34 bool AdminPoliciesStorageRdb::CreateAdminPoliciesTable()
35 {
36     std::string createTableSql = "CREATE TABLE IF NOT EXISTS ";
37     createTableSql.append(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME + " (")
38         .append(EdmRdbFiledConst::FILED_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,")
39         .append(EdmRdbFiledConst::FILED_USER_ID + " INTEGER NOT NULL,")
40         .append(EdmRdbFiledConst::FILED_ADMIN_TYPE + " INTEGER NOT NULL,")
41         .append(EdmRdbFiledConst::FILED_PACKAGE_NAME + " TEXT NOT NULL,")
42         .append(EdmRdbFiledConst::FILED_CLASS_NAME + " TEXT NOT NULL,")
43         .append(EdmRdbFiledConst::FILED_ENT_NAME + " TEXT,")
44         .append(EdmRdbFiledConst::FILED_ENT_DESC + " TEXT,")
45         .append(EdmRdbFiledConst::FILED_PERMISSIONS + " TEXT,")
46         .append(EdmRdbFiledConst::FILED_SUBSCRIBE_EVENTS + " TEXT,")
47         .append(EdmRdbFiledConst::FILED_PARENT_ADMIN + " TEXT,")
48         .append(EdmRdbFiledConst::FILED_IS_DEBUG + " INTEGER,")
49         .append(EdmRdbFiledConst::FILED_ACCESSIBLE_POLICIES + " TEXT,")
50         .append(EdmRdbFiledConst::FILED_RUNNING_MODE + " INTEGER);");
51     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
52     if (edmRdbDataManager != nullptr) {
53         return edmRdbDataManager->CreateTable(createTableSql);
54     }
55     EDMLOGE("AdminPoliciesStorageRdb::create database admin_policies failed.");
56     return false;
57 }
58 
GetInstance()59 std::shared_ptr<AdminPoliciesStorageRdb> AdminPoliciesStorageRdb::GetInstance()
60 {
61     if (!isAdminPoliciesTableInit_) {
62         isAdminPoliciesTableInit_ = CreateAdminPoliciesTable();
63     }
64     if (!isAdminPoliciesTableInit_) {
65         return nullptr;
66     }
67     std::call_once(flag_, []() {
68         if (instance_ == nullptr) {
69             instance_ = std::make_shared<AdminPoliciesStorageRdb>();
70         }
71     });
72     return instance_;
73 }
74 
InsertAdmin(int32_t userId,const Admin & admin)75 bool AdminPoliciesStorageRdb::InsertAdmin(int32_t userId, const Admin &admin)
76 {
77     EDMLOGD("AdminPoliciesStorageRdb::Insert data start.");
78     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
79     if (edmRdbDataManager == nullptr) {
80         EDMLOGE("AdminPoliciesStorageRdb::InsertAdmin get edmRdbDataManager failed.");
81         return false;
82     }
83     // insert into admin_policies(user_id, admin_type, package_name, class_name, ent_name, ent_desc, permissions,
84     //     parent_admin, is_debug, accessible_policies) values(?, ?, ?, ?, ?, ?, ?, ?, ?)
85     return edmRdbDataManager->Insert(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME,
86         CreateInsertValuesBucket(userId, admin));
87 }
88 
UpdateAdmin(int32_t userId,const Admin & admin)89 bool AdminPoliciesStorageRdb::UpdateAdmin(int32_t userId, const Admin &admin)
90 {
91     EDMLOGD("AdminPoliciesStorageRdb::Insert data start.");
92     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
93     if (edmRdbDataManager == nullptr) {
94         EDMLOGE("AdminPoliciesStorageRdb::UpdateAdmin get edmRdbDataManager failed.");
95         return false;
96     }
97     // update admin_policies set admin_type=?, ent_name=?, ent_desc=?, permissions=?, accessible_policies=?
98     //     where user_id=? and package_name=?
99     NativeRdb::AbsRdbPredicates predicates(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME);
100     predicates.EqualTo(EdmRdbFiledConst::FILED_USER_ID, std::to_string(userId));
101     predicates.EqualTo(EdmRdbFiledConst::FILED_PACKAGE_NAME, admin.adminInfo_.packageName_);
102     NativeRdb::ValuesBucket valuesBucket;
103     CreateUpdateValuesBucket(userId, admin, valuesBucket);
104     return edmRdbDataManager->Update(valuesBucket, predicates);
105 }
106 
ReplaceAdmin(const std::string packageName,int32_t userId,const Admin & newAdmin)107 bool AdminPoliciesStorageRdb::ReplaceAdmin(const std::string packageName, int32_t userId, const Admin &newAdmin)
108 {
109     EDMLOGD("AdminPoliciesStorageRdb::ReplaceAdmin data start.");
110     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
111     if (edmRdbDataManager == nullptr) {
112         EDMLOGE("AdminPoliciesStorageRdb::UpdateAdmin get edmRdbDataManager failed.");
113         return false;
114     }
115     // update admin_policies set package_name=?, permissions=? where user_id=? and package_name=?
116     NativeRdb::AbsRdbPredicates predicates(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME);
117     predicates.EqualTo(EdmRdbFiledConst::FILED_USER_ID, std::to_string(userId));
118     predicates.EqualTo(EdmRdbFiledConst::FILED_PACKAGE_NAME, packageName);
119     return edmRdbDataManager->Update(CreateInsertValuesBucket(userId, newAdmin), predicates);
120 }
121 
UpdateParentName(const std::string packageName,const std::string currentParentName,const std::string targetParentName)122 bool AdminPoliciesStorageRdb::UpdateParentName(const std::string packageName, const std::string currentParentName,
123     const std::string targetParentName)
124 {
125     EDMLOGD("AdminPoliciesStorageRdb::UpdateParentName data start.");
126     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
127     if (edmRdbDataManager == nullptr) {
128         EDMLOGE("AdminPoliciesStorageRdb::UpdateParentName get edmRdbDataManager failed.");
129         return false;
130     }
131     // update admin_policies set ParentName=? where packageName=? and ParentName=?
132     NativeRdb::AbsRdbPredicates predicates(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME);
133     predicates.EqualTo(EdmRdbFiledConst::FILED_PARENT_ADMIN, currentParentName);
134     predicates.EqualTo(EdmRdbFiledConst::FILED_PACKAGE_NAME, packageName);
135     NativeRdb::ValuesBucket valuesBucket;
136     valuesBucket.PutString(EdmRdbFiledConst::FILED_PARENT_ADMIN, targetParentName);
137     return edmRdbDataManager->Update(valuesBucket, predicates);
138 }
139 
CreateInsertValuesBucket(int32_t userId,const Admin & admin)140 NativeRdb::ValuesBucket AdminPoliciesStorageRdb::CreateInsertValuesBucket(int32_t userId, const Admin &admin)
141 {
142     NativeRdb::ValuesBucket valuesBucket;
143     valuesBucket.PutInt(EdmRdbFiledConst::FILED_RUNNING_MODE, static_cast<int>(admin.adminInfo_.runningMode_));
144     CreateUpdateValuesBucket(userId, admin, valuesBucket);
145     valuesBucket.PutInt(EdmRdbFiledConst::FILED_USER_ID, userId);
146     valuesBucket.PutString(EdmRdbFiledConst::FILED_PACKAGE_NAME, admin.adminInfo_.packageName_);
147     valuesBucket.PutString(EdmRdbFiledConst::FILED_CLASS_NAME, admin.adminInfo_.className_);
148     valuesBucket.PutString(EdmRdbFiledConst::FILED_PARENT_ADMIN, admin.adminInfo_.parentAdminName_);
149     valuesBucket.PutBool(EdmRdbFiledConst::FILED_IS_DEBUG, admin.adminInfo_.isDebug_);
150     return valuesBucket;
151 }
152 
CreateUpdateValuesBucket(int32_t userId,const Admin & admin,NativeRdb::ValuesBucket & valuesBucket)153 void AdminPoliciesStorageRdb::CreateUpdateValuesBucket(int32_t userId, const Admin &admin,
154     NativeRdb::ValuesBucket &valuesBucket)
155 {
156     valuesBucket.PutInt(EdmRdbFiledConst::FILED_ADMIN_TYPE, static_cast<int>(admin.adminInfo_.adminType_));
157 
158     if (!admin.adminInfo_.entInfo_.enterpriseName.empty()) {
159         valuesBucket.PutString(EdmRdbFiledConst::FILED_ENT_NAME, admin.adminInfo_.entInfo_.enterpriseName);
160     }
161 
162     if (!admin.adminInfo_.entInfo_.description.empty()) {
163         valuesBucket.PutString(EdmRdbFiledConst::FILED_ENT_DESC, admin.adminInfo_.entInfo_.description);
164     }
165 
166     cJSON *permissionsArray = nullptr;
167     CJSON_CREATE_ARRAY_AND_CHECK_VOID(permissionsArray);
168     for (const auto &permission : admin.adminInfo_.permission_) {
169         cJSON* itemJson = cJSON_CreateString(permission.c_str());
170         if (itemJson == nullptr) {
171             cJSON_Delete(permissionsArray);
172             return;
173         }
174         CJSON_ADD_ITEM_TO_ARRAY_AND_CHECK_AND_CLEAR_VOID(itemJson, permissionsArray);
175     }
176     char *permissionsStr = cJSON_PrintUnformatted(permissionsArray);
177     if (permissionsStr != nullptr) {
178         valuesBucket.PutString(EdmRdbFiledConst::FILED_PERMISSIONS, permissionsStr);
179         cJSON_free(permissionsStr);
180     }
181     cJSON_Delete(permissionsArray);
182 
183     if (admin.adminInfo_.adminType_ == AdminType::VIRTUAL_ADMIN) {
184         cJSON *policiesArray = nullptr;
185         CJSON_CREATE_ARRAY_AND_CHECK_VOID(policiesArray);
186         for (const auto &policy : admin.adminInfo_.accessiblePolicies_) {
187             cJSON* itemJson = cJSON_CreateString(policy.c_str());
188             if (itemJson == nullptr) {
189                 cJSON_Delete(policiesArray);
190                 return;
191             }
192             CJSON_ADD_ITEM_TO_ARRAY_AND_CHECK_AND_CLEAR_VOID(itemJson, policiesArray);
193         }
194         char *policiesStr = cJSON_PrintUnformatted(policiesArray);
195         if (policiesStr != nullptr) {
196             valuesBucket.PutString(EdmRdbFiledConst::FILED_ACCESSIBLE_POLICIES, policiesStr);
197             cJSON_free(policiesStr);
198         }
199         cJSON_Delete(policiesArray);
200     }
201 
202     // Add running mode if not default
203     RunningMode runningMode = admin.adminInfo_.runningMode_;
204     if (runningMode != RunningMode::DEFAULT) {
205         valuesBucket.PutInt(EdmRdbFiledConst::FILED_RUNNING_MODE, static_cast<uint32_t>(runningMode));
206     }
207 }
208 
DeleteAdmin(int32_t userId,const std::string & packageName)209 bool AdminPoliciesStorageRdb::DeleteAdmin(int32_t userId, const std::string &packageName)
210 {
211     EDMLOGD("AdminPoliciesStorageRdb::DeleteAdmin.");
212     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
213     if (edmRdbDataManager == nullptr) {
214         EDMLOGE("AdminPoliciesStorageRdb::DeleteAdmin get edmRdbDataManager failed.");
215         return false;
216     }
217     // delete from admin_policies where user_id=? and package_name=?
218     NativeRdb::AbsRdbPredicates predicates(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME);
219     predicates.EqualTo(EdmRdbFiledConst::FILED_USER_ID, std::to_string(userId));
220     predicates.EqualTo(EdmRdbFiledConst::FILED_PACKAGE_NAME, packageName);
221     return edmRdbDataManager->Delete(predicates);
222 }
223 
UpdateEntInfo(int32_t userId,const std::string & packageName,const EntInfo & entInfo)224 bool AdminPoliciesStorageRdb::UpdateEntInfo(int32_t userId, const std::string &packageName, const EntInfo &entInfo)
225 {
226     EDMLOGD("AdminPoliciesStorageRdb::UpdateEntInfo.");
227     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
228     if (edmRdbDataManager == nullptr) {
229         EDMLOGE("AdminPoliciesStorageRdb::UpdateEntInfo get edmRdbDataManager failed.");
230         return false;
231     }
232     // update admin_policies set ent_name=?, ent_desc=? where user_id=? and package_name=?
233     NativeRdb::ValuesBucket valuesBucket;
234     valuesBucket.PutString(EdmRdbFiledConst::FILED_ENT_NAME, entInfo.enterpriseName);
235     valuesBucket.PutString(EdmRdbFiledConst::FILED_ENT_DESC, entInfo.description);
236 
237     NativeRdb::AbsRdbPredicates predicates(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME);
238     predicates.EqualTo(EdmRdbFiledConst::FILED_USER_ID, std::to_string(userId));
239     predicates.EqualTo(EdmRdbFiledConst::FILED_PACKAGE_NAME, packageName);
240     return edmRdbDataManager->Update(valuesBucket, predicates);
241 }
242 
UpdateManagedEvents(int32_t userId,const std::string & packageName,const std::vector<ManagedEvent> & managedEvents)243 bool AdminPoliciesStorageRdb::UpdateManagedEvents(int32_t userId, const std::string &packageName,
244     const std::vector<ManagedEvent> &managedEvents)
245 {
246     EDMLOGD("AdminPoliciesStorageRdb::UpdateManagedEvents.");
247     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
248     if (edmRdbDataManager == nullptr) {
249         EDMLOGE("AdminPoliciesStorageRdb::UpdateManagedEvents get edmRdbDataManager failed.");
250         return false;
251     }
252     // update admin_policies set subscribe_events=? where user_id=? and package_name=?
253     NativeRdb::ValuesBucket valuesBucket;
254 
255     cJSON *managedEventsArray = nullptr;
256     CJSON_CREATE_ARRAY_AND_CHECK(managedEventsArray, false);
257     for (const auto &it : managedEvents) {
258         cJSON* itemJson = cJSON_CreateNumber(static_cast<uint32_t>(it));
259         if (itemJson == nullptr) {
260             cJSON_Delete(managedEventsArray);
261             return false;
262         }
263         CJSON_ADD_ITEM_TO_ARRAY_AND_CHECK_AND_CLEAR(itemJson, managedEventsArray, false);
264     }
265     char *managedEventsStr = cJSON_PrintUnformatted(managedEventsArray);
266     if (managedEventsStr != nullptr) {
267         valuesBucket.PutString(EdmRdbFiledConst::FILED_SUBSCRIBE_EVENTS, managedEventsStr);
268         cJSON_free(managedEventsStr);
269     }
270     cJSON_Delete(managedEventsArray);
271 
272     NativeRdb::AbsRdbPredicates predicates(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME);
273     predicates.EqualTo(EdmRdbFiledConst::FILED_USER_ID, std::to_string(userId));
274     predicates.EqualTo(EdmRdbFiledConst::FILED_PACKAGE_NAME, packageName);
275     return edmRdbDataManager->Update(valuesBucket, predicates);
276 }
277 
QueryAllAdmin()278 std::unordered_map<int32_t, std::vector<std::shared_ptr<Admin>>> AdminPoliciesStorageRdb::QueryAllAdmin()
279 {
280     EDMLOGD("AdminPoliciesStorageRdb::QueryAllAdmin.");
281     auto edmRdbDataManager = EdmRdbDataManager::GetInstance();
282     std::unordered_map<int32_t, std::vector<std::shared_ptr<Admin>>> admins;
283     if (edmRdbDataManager == nullptr) {
284         EDMLOGE("AdminPoliciesStorageRdb::QueryAllAdmin get edmRdbDataManager failed.");
285         return admins;
286     }
287     // select * from admin_policies
288     NativeRdb::AbsRdbPredicates predicates(EdmRdbFiledConst::ADMIN_POLICIES_RDB_TABLE_NAME);
289     auto resultSet = edmRdbDataManager->Query(predicates, std::vector<std::string>());
290     if (resultSet == nullptr) {
291         return admins;
292     }
293     int resultSetNum = resultSet->GoToFirstRow();
294     while (resultSetNum == NativeRdb::E_OK) {
295         std::shared_ptr<Admin> item = std::make_shared<Admin>();
296         int32_t userId = 0;
297         resultSet->GetInt(EdmRdbFiledConst::FILED_COLUMN_INDEX_ONE, userId);
298         SetAdminItems(resultSet, item);
299         if (admins.find(userId) != admins.end()) {
300             admins[userId].push_back(item);
301         } else {
302             std::vector<std::shared_ptr<Admin>> adminItems{item};
303             admins[userId] = adminItems;
304         }
305         resultSetNum = resultSet->GoToNextRow();
306     }
307     resultSet->Close();
308     return admins;
309 }
310 
SetAdminStringInfo(const std::string & stringInfo,std::vector<std::string> & info)311 void AdminPoliciesStorageRdb::SetAdminStringInfo(const std::string &stringInfo, std::vector<std::string> &info)
312 {
313     if (stringInfo.empty() || stringInfo == "null") {
314         return;
315     }
316     cJSON *jsonInfo = cJSON_Parse(stringInfo.c_str());
317     if (jsonInfo == nullptr) {
318         EDMLOGE("AdminPoliciesStorageRdb::SetAdminStringInfo failed: JSON parsing failed.");
319         return;
320     }
321 
322     if (cJSON_IsArray(jsonInfo)) {
323         int arraySize = cJSON_GetArraySize(jsonInfo);
324         if (arraySize > EdmConstants::DEFAULT_LOOP_MAX_SIZE) {
325             EDMLOGE("AdminPoliciesStorageRdb::SetAdminStringInfo failed: Array size exceeds limit.");
326             cJSON_Delete(jsonInfo);
327             return;
328         }
329 
330         cJSON *element = nullptr;
331         cJSON_ArrayForEach(element, jsonInfo) {
332             if (cJSON_IsString(element)) {
333                 info.emplace_back(element->valuestring);
334             }
335         }
336     }
337 
338     cJSON_Delete(jsonInfo);
339 }
340 
SetAdminItems(std::shared_ptr<NativeRdb::ResultSet> resultSet,std::shared_ptr<Admin> item)341 void AdminPoliciesStorageRdb::SetAdminItems(std::shared_ptr<NativeRdb::ResultSet> resultSet,
342     std::shared_ptr<Admin> item)
343 {
344     if (resultSet == nullptr || item == nullptr) {
345         EDMLOGE("AdminPoliciesStorageRdb::SetAdminItems failed.");
346         return;
347     }
348     int32_t adminType = 0;
349     resultSet->GetInt(EdmRdbFiledConst::FILED_COLUMN_INDEX_TWO, adminType);
350     item->adminInfo_.adminType_ = static_cast<AdminType>(adminType);
351     resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_THREE, item->adminInfo_.packageName_);
352     resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_FOUR, item->adminInfo_.className_);
353     resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_FIVE, item->adminInfo_.entInfo_.enterpriseName);
354     resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_SIX, item->adminInfo_.entInfo_.description);
355     bool isPermissionStrNull = false;
356     resultSet->IsColumnNull(EdmRdbFiledConst::FILED_COLUMN_INDEX_SEVEN, isPermissionStrNull);
357     if (!isPermissionStrNull) {
358         std::string permissionStr;
359         resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_SEVEN, permissionStr);
360         SetAdminStringInfo(permissionStr, item->adminInfo_.permission_);
361     }
362     bool isManagedEventStrNull = false;
363     resultSet->IsColumnNull(EdmRdbFiledConst::FILED_COLUMN_INDEX_EIGHT, isManagedEventStrNull);
364     if (!isManagedEventStrNull) {
365         SetManagedEventStr(resultSet, item);
366     }
367     resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_NINE, item->adminInfo_.parentAdminName_);
368     int isDebug = 0;
369     resultSet->GetInt(EdmRdbFiledConst::FILED_COLUMN_INDEX_TEN, isDebug);
370     item->adminInfo_.isDebug_ = isDebug != 0;
371     bool isPoliciesStrNull = false;
372     resultSet->IsColumnNull(EdmRdbFiledConst::FILED_COLUMN_INDEX_ELEVEN, isPoliciesStrNull);
373     if (!isPoliciesStrNull) {
374         std::string policiesStr;
375         resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_ELEVEN, policiesStr);
376         SetAdminStringInfo(policiesStr, item->adminInfo_.accessiblePolicies_);
377     }
378     int32_t runningMode = 0;
379     resultSet->GetInt(EdmRdbFiledConst::FILED_COLUMN_INDEX_TWELVE, runningMode);
380     item->adminInfo_.runningMode_ = static_cast<RunningMode>(runningMode);
381 }
382 
SetManagedEventStr(std::shared_ptr<NativeRdb::ResultSet> resultSet,std::shared_ptr<Admin> item)383 void AdminPoliciesStorageRdb::SetManagedEventStr(std::shared_ptr<NativeRdb::ResultSet> resultSet,
384     std::shared_ptr<Admin> item)
385 {
386     if (resultSet == nullptr || item == nullptr) {
387         EDMLOGE("AdminPoliciesStorageRdb::SetManagedEventStr failed.");
388         return;
389     }
390     std::string managedEventsStr;
391     resultSet->GetString(EdmRdbFiledConst::FILED_COLUMN_INDEX_EIGHT, managedEventsStr);
392     if (managedEventsStr.empty() || managedEventsStr == "null") {
393         return;
394     }
395 
396     cJSON* managedEventsJson = cJSON_Parse(managedEventsStr.c_str());
397     if (managedEventsJson == nullptr) {
398         return;
399     }
400 
401     if (cJSON_GetArraySize(managedEventsJson) > EdmConstants::DEFAULT_LOOP_MAX_SIZE) {
402         cJSON_Delete(managedEventsJson);
403         return;
404     }
405 
406     cJSON* element = nullptr;
407     cJSON_ArrayForEach(element, managedEventsJson) {
408         if (cJSON_IsNumber(element)) {
409             item->adminInfo_.managedEvents_.push_back(static_cast<ManagedEvent>(element->valueint));
410         }
411     }
412 
413     cJSON_Delete(managedEventsJson);
414 }
415 } // namespace EDM
416 } // namespace OHOS