# Letöltési hivatkozások korlátozása a bejegyzés készítőjére

> Szűrőkkel úgy zárhatod le a feltöltött fájlok letöltését, hogy csak az töltse le őket, aki a bejegyzést beküldte.

A fájlok letöltésének védelménél előfordulhat, hogy azt szeretnéd, hogy a feltöltött fájlokhoz csak a bejegyzést beküldő felhasználó férjen hozzá. Ez az útmutató szűrőkkel korlátozza a hozzáférést a bejegyzés eredeti beküldőjére. A fájlfeltöltés általános védelméről a [Fájlfeltöltés biztonsága](https://hub.hellowp.io/hu/plugins/gravityforms/hogyan-fajlfeltoltes-biztonsag/) fejezetben olvashatsz.

## Mit csinál a kód

A négy szűrő együtt működik:

1. A `gform_pre_replace_merge_tags` a fájlfeltöltő mezők környezetébe teszi a bejegyzés azonosítóját és készítőjét.
2. A `gform_secure_file_download_url` ezt a két adatot hozzáfűzi a biztonságos letöltési hivatkozáshoz (`id-e` és `id-c` paraméterként). A bejegyzés részletei oldalon a jelenlegi bejegyzésből veszi az adatokat.
3. A `gform_require_login_pre_download` bejelentkezéshez köti a letöltést: aki nincs bejelentkezve, átkerül a bejelentkezési oldalra.
4. A `gform_permission_granted_pre_download` engedélyt csak akkor ad, ha a bejegyzés készítője egyezik a bejelentkezett felhasználóval, és a bejegyzésben van érték a mezőben.

```php
add_filter( 'gform_pre_replace_merge_tags', function ( $text, $form, $entry ) {
	if ( empty( $entry['id'] ) || empty( $entry['created_by'] ) ) {
		return $text;
	}

	foreach ( $form['fields'] as $field ) {
		if ( ! $field instanceof GF_Field_FileUpload ) {
			continue;
		}
		$field->set_context_property( 'entry_id', $entry['id'] );
		$field->set_context_property( 'entry_created_by', $entry['created_by'] );
	}

	return $text;
}, 10, 3 );

add_filter( 'gform_secure_file_download_url', function ( $download_url, $field ) {
	if ( GFCommon::is_entry_detail() ) {
		$entry      = GFEntryDetail::get_current_entry();
		$entry_id   = rgar( $entry, 'id' );
		$created_by = rgar( $entry, 'created_by' );
	} else {
		$entry_id   = $field->get_context_property( 'entry_id' );
		$created_by = $field->get_context_property( 'entry_created_by' );
	}

	if ( empty( $entry_id ) || empty( $created_by ) ) {
		return $download_url;
	}

	return add_query_arg( array( 'id-e' => $entry_id, 'id-c' => $created_by ), $download_url );
}, 10, 2 );

add_filter( 'gform_require_login_pre_download', function ( $require_login ) {
	$require_login = true;
	if ( ! is_user_logged_in() ) {
		auth_redirect();
	}

	return $require_login;
} );

add_filter( 'gform_permission_granted_pre_download', function ( $permission_granted, $form_id, $field_id ) {
	$entry_id   = rgget( 'id-e' );
	$created_by = rgget( 'id-c' );
	if ( empty( $entry_id ) || empty( $created_by ) ) {
		return false;
	}

	$entry = GFAPI::get_entry( $entry_id );
	if ( is_wp_error( $entry ) || rgar( $entry, 'created_by' ) !== $created_by || empty( $entry[ $field_id ] ) ) {
		return false;
	}

	return get_current_user_id() == $created_by;
}, 10, 3 );
```

## Hová tedd a kódot

A kódot az aktív téma `functions.php` fájljába, egyedi funkciók bővítményébe, egyedi kiegészítőbe vagy kódrészlet-kezelő bővítménybe teheted.
