Tovább a tartalomhoz

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 fejezetben olvashatsz.

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.
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 );

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.

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások