public function fire() { $updateRolesOpt = $this->option('update-roles'); $role_permissions = Config::get("acl::config.roles"); $group_resources = Config::get("acl::config.group_resources"); $db_group_resources = GroupResources::all(); $db_role_permissions = RolePermission::all(); if (!$db_role_permissions->count()) { $updateRolesOpt = true; } $group_resources_map = array(); foreach ($db_group_resources as $row) { $group_resources_map[$row->resource] = $row->permission_id; } $this->updateResorces($group_resources_map, $group_resources); $this->updateRolesResources(); if ($updateRolesOpt && count($role_permissions)) { // if there new roles add them, don't delete not list role $roles = Acl::getRoles(); $rolesMap = array(); foreach ($roles as $row) { $rolesMap[$row->name] = $row->role_id; } Acl::runUnguardCallback(function () use($role_permissions, $rolesMap) { foreach ($role_permissions as $role) { $aclRole = new AclRole($role); $role_name = $role['name']; if (isset($rolesMap[$role_name])) { $role['role_id'] = $rolesMap[$role_name]; $aclRole = new AclRole($role); $aclRole->update(); } else { $aclRole = new AclRole($role); $aclRole->add(); } } }); $roles_ids = array_values($rolesMap); if (count($roles_ids)) { UserRole::whereNotIn('role_id', $roles_ids)->delete(); } } }