. * * @link https://www.librenms.org * * @copyright 2018 Tony Murray * @author Tony Murray */ namespace App\Models; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; abstract class BaseModel extends Model { /** * Check if query is already joined with a table * * @param Builder $query * @param string $table * @return bool */ public static function isJoined($query, $table) { $joins = $query->getQuery()->joins; if ($joins == null) { return false; } foreach ($joins as $join) { if ($join->table == $table) { return true; } } return false; } /** * Helper function to determine if user has access based on device permissions * * @param Builder $query * @param User $user * @param string $table * @return Builder */ protected function hasDeviceAccess($query, User $user, $table = null) { if ($user->hasGlobalRead()) { return $query; } if (is_null($table)) { $table = $this->getTable(); } return $query->whereIntegerInRaw("$table.device_id", \Permissions::devicesForUser($user)); } /** * Helper function to determine if user has access based on port permissions * * @param Builder $query * @param User $user * @param string $table * @return Builder */ protected function hasPortAccess($query, User $user, $table = null) { if ($user->hasGlobalRead()) { return $query; } if (is_null($table)) { $table = $this->getTable(); } return $query->where(function ($query) use ($table, $user) { return $query->whereIntegerInRaw("$table.port_id", \Permissions::portsForUser($user)) ->orWhereIntegerInRaw("$table.device_id", \Permissions::devicesForUser($user)); }); } }