2016-07-15 59 views
0

我希望某些菜單選項僅對某些用戶可見。根據角色顯示/隱藏(laravel)菜單

我通過添加兩個角色 - 布爾列:isTeacherisOnCommittee修改了標準身份驗證框架中的用戶表。

我想我會嘗試

  1. 在我的控制器創建一個方法來檢查,如果登錄的用戶擁有特定的角色,然後在視圖
  2. ,調用該方法,並顯示菜單選項,(或不)。

@if (Auth::iSTeacher())放到我的視野中,這是一切都很好,但我在哪裏放我的功能?

我所做的所有文件guest()搜索,發現這個

...\vendor\laravel\framework\src\Illuminate\Contracts\Auth\Guard.php: 
public function guest(); 

/** 
* Get the currently authenticated user. 
* 
* @return \Illuminate\Contracts\Auth\Authenticatable|null 
*/ 

我明白了保護的目的是保護路徑,所以這不是它的地方。

我應該在哪裏創建我的功能?

(如果你沒有猜 - 我很新的laravel

+0

我認爲你應該使用$ _SESSION來檢查用戶名。 –

+0

你應該把你的函數放在你的'UserController.php'中。 –

回答

1

我要做到這一點首選方法是通過門門面授權可以在AuthServiceProvider定義所謂的「能力」是這樣的:

public function boot(GateContract $gate) 
{ 
    $this->registerPolicies($gate); 

    $gate->define('update-post', function ($user, $post) { 
     return $user->id === $post->user_id; 
    }); 
} 

比裏面的觀點,你可以檢查:

@can('update-post', $post) 
    <a href="/post/{{ $post->id }}/edit">Edit Post</a> 
@endcan 

來源: https://laravel.com/docs/5.2/authorization#within-blade-templates

+1

謝謝。必須在那裏學習一些新的東西,但這就是我在這裏;)乾杯 – Maxcot

0

您可以在用戶模型中使用Query Scopes功能,例如寫你isTeacher()User模型,並考慮檢查

@if(Auth::user()->isTeacher) 
    YOUR CODE HERE 
@end if 
+0

這個原理是有道理的。所以在我的用戶模型中,我添加了一個函數'public function scopeIsTeacher($ query) {return true;}'但是我現在收到錯誤'嘗試獲取非對象的屬性' – Maxcot

+0

嗯..根據文檔,'範圍應該總是返回一個查詢構建器實例:'所以,你可以在範圍內做你的查詢並返回結果,並在視圖中,你需要檢查教師的價值..猜測它不是一個優雅的解決方案。讓我看看如果我能找到任何東西。 –