2016-05-18 12 views
0

私はLaravel 5 REST-webappを構築しています。今私はAdmiを追加したいと思います。私は1対多の関係設定することでこれを行っているので、同じようにテーブル を(1つの役割を持つことができ、ユーザが、1つの役割は、多くのユーザーを持つことができます):Laravel 5 checkif管理ミドルウェアロジックが正しくありません(ロールが1対多)

この作品
public function role() 
{ 
    return $this->hasOne(Role::class); 
} 

、私はROLE_IDを持つユーザーを持っています。 しかし、今私はミドルウェアを書き留めて、このrole_idを正しく使用しています。

は今、私の管理ミドルウェアは

public function handle($request, Closure $next, $guard = null) 
{ 
    if (Auth::User()->isRole('Admin')) { 
     return $next($request); 
    } 
    return redirect()->guest('login'); 
} 

そして、私が持っている私のユーザーモデルである:

public function isRole($roleName) 
{ 

    if ($this->with('role') == $roleName) 
    { 
     print_r($this->with('role.name')); 
    } 

    return false; 
} 

しかし、このコードは、単にホームページに私を送信します。

私のミドルウェアのロジックは間違っています(他のすべては正しく設定されています)。

public function isRole($roleName) 
{ 

    if ($this->with('role') == $roleName) 
    { 
     print_r($this->with('role.name')); 
    } 

    return false; 
} 

へ:

種類は

答えて

1

あなたはおそらく変更する必要がありますについて

public function isRole($roleName) 
{ 
    return $this->role->name == $roleName; 
} 

それを動作させるために

EDIT

あなたはまた、おそらくからあなたの関係を変更する必要があり

:あなたはusersテーブル

+0

role_id列を持っていると仮定し

public function role() { return $this->belongsTo(Role::class); } 

public function role() { return $this->hasOne(Role::class); } 

コメントありがとうございました。 7エラー:列roles.user_idが存在しません 行1:「ロール」から「*ロール」、「user_id」= $ 1、「ロール」を選択します。 ^(SQL:select * from "role"、 "role"、 "role"、 "role"、 "role"、 "role"、 "roles"、 "roles"、 "roles"など)を使用することができます。テーブル、それはこのようなものだ、多くの多くの場合: 'foreachの(の$ this - >役割() - >(取得)$の役割など) { 場合($ロールベース>名前== $のroleName) { リターン真; } } 返信false; ' – user3634184

+0

@ user3634184私の編集した回答を見てください –

関連する問題