All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.orientechnologies.agent.functions.OSQLEnterpriseFunction Maven / Gradle / Ivy

package com.orientechnologies.agent.functions;

import com.orientechnologies.orient.core.command.OCommandContext;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
import com.orientechnologies.orient.core.exception.OSecurityAccessException;
import com.orientechnologies.orient.core.metadata.security.ORole;
import com.orientechnologies.orient.core.metadata.security.ORule;
import com.orientechnologies.orient.core.metadata.security.OSecurityUser;
import com.orientechnologies.orient.core.sql.functions.OSQLFunctionAbstract;
import com.orientechnologies.orient.server.OClientConnection;

/**
 * Created by Enrico Risa on 03/08/2018.
 */
public abstract class OSQLEnterpriseFunction extends OSQLFunctionAbstract {

  public OSQLEnterpriseFunction(String iName, int iMinParams, int iMaxParams) {
    super(iName, iMinParams, iMaxParams);
  }

  @Override
  public Object execute(Object iThis, OIdentifiable iCurrentRecord, Object iCurrentResult, Object[] iParams,
      OCommandContext iContext) {

    OSecurityUser user = iContext.getDatabase().getUser();
    if (user != null && user.checkIfAllowed(genericPermission(), specificPermission(), ORole.PERMISSION_EXECUTE) != null) {
      return exec(this, iCurrentRecord, iCurrentResult, iParams, iContext);
    } else {
      String usr = user != null ? user.getName() : "null";
      throw new OSecurityAccessException(" User " + usr + " does not have permission to execute the operation '" + ORole
          .permissionToString(ORole.PERMISSION_EXECUTE) + "' against the resource: " + genericPermission() + "."
          + specificPermission());
    }

  }

  protected boolean sameDatabase(OClientConnection connection, OCommandContext iContext) {
    return connection.getDatabase() != null && connection.getDatabase().getName()
        .equalsIgnoreCase(iContext.getDatabase().getName());
  }

  public abstract Object exec(Object iThis, OIdentifiable iCurrentRecord, Object iCurrentResult, Object[] iParams,
      OCommandContext iContext);

  public abstract ORule.ResourceGeneric genericPermission();

  public abstract String specificPermission();

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy