code: @Override
      public void checkPermission(Permission permission, AddOnModel addon) throws IzouPermissionException {
          for (String socket : allowedSocketConnections) {
              if (permission.getName().contains(socket)) {
                  return;
              }
          }
  
          if (isRegistered(addon))
              return;
  
          Function<PluginDescriptor, Boolean> checkPermission = descriptor -> {
              if (descriptor.getAddOnProperties() == null)
                  throw new IzouPermissionException("addon_config.properties not found for addon:" + addon);
              try {
                  return descriptor.getAddOnProperties().getProperty("socket_connection") != null
                          && descriptor.getAddOnProperties().getProperty("socket_connection").trim().equals("true")
                          && descriptor.getAddOnProperties().getProperty("socket_usage_descripton") != null
                          && !descriptor.getAddOnProperties().getProperty("socket_usage_descripton").trim().equals("null")
                          && !descriptor.getAddOnProperties().getProperty("socket_usage_descripton").trim().isEmpty();
              } catch (NullPointerException e) {
                  return false;
              }
          };
  
          String exceptionMessage = "Socket Permission Denied: " + addon + "is not registered to "
                  + "use socket connections, please add the required information to the addon_config.properties "
                  + "file of your addOn.";
          registerOrThrow(addon, () -> new IzouSocketPermissionException(exceptionMessage), checkPermission);
      }
docs: Checks if the given addOn is allowed to access the requested service and registers them if not yet registered.
  
  @param permission the Permission to check
  @param addon      the identifiable to check
  @throws IzouPermissionException thrown if the addOn is not allowed to access its requested service