Je développe une API RESTful avec Laravel 5. J'ai des ressources dans mon fichier routes.php
et tout fonctionne correctement.Laravel 5 API RESTful - Comprendre les concepts de ressources
Mais maintenant j'avais ajouté auth.basic
middleware et je veux introduire les rôles de l'utilisateur et je me suis trompé.
Dans mon contrôleur, j'ai un constructeur pour appeler 2 middleware, auth.basic et rôles middleware, mais ne peut pas continuer en raison d'un manque de connaissances.
De quoi ai-je besoin? Eh bien, j'ai besoin de définir les rôles utilisateur qui peuvent accéder à chaque contrôleur, mais ne peux pas y parvenir. Im le contrôleur Je voudrais accéder à l'utilisateur pour vérifier son rôle et le comparer avec le rôle établi sur le contrôleur, mais je ne sais pas comment accéder à l'utilisateur, pouvez-vous m'aider?
EDIT:
Je mets cela sur le constructeur du contrôleur
public function __construct(Request $request)
{
$actions = $request->route()->setAction(['roles' => ['admin', 'seller', 'buyer']]);
$this->middleware('auth.basic');
$this->middleware('roles');
}
Fondamentalement, j'Injecter la demande dans le constructeur du contrôleur, puis je mis une action appelée rôles. Ensuite, j'appelle middleware auth.basic pour définir l'utilisateur. Et derniers rôles de middleware d'appel qui contrôle le rôle d'utilisateur par rapport à l'ensemble des rôles dans la demande, si elle a le rôle ou s'il est root, alors le résultat est vrai, sinon je renvoie une erreur:
return response([
'error' => [
'code' => 'INSUFFICIENT_ROLE',
'description' => 'You are not authorized to access this resource.'
]
], 401);
Maintenant je l'erreur qui obtient toujours:
{"error":{"code":"INSUFFICIENT_ROLE","description":"You are not authorized to access this resource."}}
C'est parce que le modèle utilisateur ne renvoie pas de rôle. Voir dans ma classe:
class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['username', 'email', 'password', 'role_id'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = ['password', 'remember_token'];
//Comprobacion del rol del usuario
public function hasRole($roles)
{
$this->have_role = $this->getUserRole();
// Check if the user is a root account
if($this->have_role->name == 'root') {
return true;
}
if(is_array($roles)){
foreach($roles as $need_role){
if($this->checkIfUserHasRole($need_role)) {
return true;
}
}
} else{
return $this->checkIfUserHasRole($roles);
}
return false;
}
private function getUserRole()
{
return $this->role()->getResults();
}
private function checkIfUserHasRole($need_role)
{
return (strtolower($need_role)==strtolower($this->have_role->name)) ? true : false;
}
//User relation with role
public function role(){
return $this->belongsTo('App\Role');
}
}
Quel est le problème?
Heureux que vous avez trouvé la solution - Excuses que je ne pouvais pas répondre correctement car j'étais au travail et ne pouvais pas poster. – Phorce
Ne vous inquiétez pas @Phorce, vous m'avez beaucoup guidée. Merci! –