[RESOLU] Limiter l'acces au données via une URL à son createur (owner)

Eléphanteau du PHP | 12 Messages

06 févr. 2021, 06:01

Bonjour,

Je souhaiterais limiter l'accès à une URL au créateur de son dossier (un utilisateur ne peut avoir qu'un dossier) :

Code : Tout sélectionner

/file/{id}/edit
{id} correspond à l'ID de la table "files" suivante :

Table "files"

Code : Tout sélectionner

id | file_id | file_creator_id 6 | 2021-1 | 1
Relation User | File
Modèle "User"

Code : Tout sélectionner

public function file() { return $this->belongsTo('App\File','file_creator_id'); }


Modèle "File"

Code : Tout sélectionner

public function user() { return $this->hasOne('App\User'); }

EXEMPLE

ID utilisateur authentifié = 1

Si un utilisateur authentifié veux accéder à son dossier, il peut cliquer sur un lien menu :

Code : Tout sélectionner

{{ URL::to('/files/' . $file['id'] . '/edit') }}

Code : Tout sélectionner

$file['id']
récupère l'id de la relation User | File.

et le dossier est affiché.

Le problème est que l'utilisateur n'a qu'a modifier l'id de l'URL

par exemple de /file/6/edit en /file/1/edit pour accéder au dossier d'un autre utilisateur.

QUESTION
Quel est la manière la plus simple pour limiter l'accès au dossier qu'a son créateur.

Merci d'avance de vos suggestions.

Marc

Eléphanteau du PHP | 12 Messages

05 mars 2021, 09:58

Pour info, j'ai regle le probleme de la maniere suivante dans une des methodes de mon controleur :

Code : Tout sélectionner

$file = File::find($id); // if user is not an admin (ASSET MANAGER) he will be routed to his file if ($user->role_id != 2 && $id == 0) { $file = File::where(['file_creator_id' => $user->id])->first(); return redirect('/files/' . $file->id . '/edit'); } // if file not found or user is not an admin and not the file owner, he will be redirect to the dashboard elseif (!$file || ($user->role_id != 2 && $file->file_creator_id != $user->id)) { return redirect('/dashboard'); }