@Override
    public boolean isGrantableFrom(ResourcePermission other) {
      if (other == null) {
        return false;
      }

      if (!other.isWithGrantOption()) {
        return false;
      }

      return this.equalsIgnoreGrantOption(other);
    }
  public static ResourcePermission getInstance(ResourcePermission resourcePermission) {
    if (resourcePermission instanceof ResourcePermissions.ResourcePermissionImpl) {
      return resourcePermission;
    }

    final ResourcePermission verifiedPermission;

    if (resourcePermission.isWithGrantOption()) {
      verifiedPermission = getInstanceWithGrantOption(resourcePermission.getPermissionName());
    } else {
      verifiedPermission = getInstance(resourcePermission.getPermissionName());
    }

    // validate system permission name and id matched
    if (resourcePermission.isSystemPermission()
        && verifiedPermission.getSystemPermissionId()
            != resourcePermission.getSystemPermissionId()) {
      throw new IllegalArgumentException(
          "Invalid system permission id for resource permission: " + resourcePermission);
    }

    return verifiedPermission;
  }