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.
Mit csinál a kód
Szekció neve “Mit csinál a kód”A négy szűrő együtt működik:
- A
gform_pre_replace_merge_tagsa fájlfeltöltő mezők környezetébe teszi a bejegyzés azonosítóját és készítőjét. - A
gform_secure_file_download_urlezt a két adatot hozzáfűzi a biztonságos letöltési hivatkozáshoz (id-eésid-cparaméterként). A bejegyzés részletei oldalon a jelenlegi bejegyzésből veszi az adatokat. - A
gform_require_login_pre_downloadbejelentkezéshez köti a letöltést: aki nincs bejelentkezve, átkerül a bejelentkezési oldalra. - A
gform_permission_granted_pre_downloadengedé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 );Hová tedd a kódot
Szekció neve “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.
Készült: