2017-09-03 88 views
0

我想在用戶通過身份驗證後設置全局變量 - 我們稱之爲permissions。變量應該在控制器和視圖中可用。在Laravel的用戶授權後創建全局權限變量

實現它的最好方法是什麼?現在,在每種方法中,我必須執行數據庫查詢並檢查不是最優的用戶角色。

我知道我可以在appserviceprovider中聲明view::share方法來將變量傳遞給視圖,但是在用戶通過身份驗證後會執行引導方法。

更新

我創建BaseController從控制器的延伸。

BaseController:

class BaseController extends Controller { 

    public $permissions; 

    public function __construct() { 
     $this->permissions = GroupRoles::where('id', Auth::user()->id)->first(); 
    } 

} 

然後我試圖訪問從UserController中從BaseController擴展了權限變量。試圖訪問非對象。我認爲這是因爲BaseController構造函數是在中間件之前構造的。

class UserController extends BaseController { 

    public function showPermissions() { 
    return var_dump($this->permissions); 
    } 

} 

最終溶液

基礎是在BaseController使用$this->middleware(function ($request, $next)。在控制器內

回答

0

試試,或創建自己的BaseController然後把它擴展你的控制器,並在BaseController你可以做這樣的

public $permissions; 

public function __construct() 
{ 
    $permissions = Permissions::all() //For example 
    $this->permissions = $permissions 
} 

然後你就可以從每一個控制器訪問它像這樣$this->permissions

+0

我用它創建了BaseController和構造函數。但我仍然無法從UserController訪問權限變量。我認爲我應該做更多的事情。因爲我正在嘗試獲取非對象屬性的錯誤。所以這個問題仍然與認證有關。 –

+0

但是你試着從套裝中設置Permssion嗎?用戶控制器必須擴展BaseController,以便獲得它。或者,首先嚐試在構造函數中轉儲var,以便確保所需的數據在那裏。 –

+0

UserController擴展了BaseController。 BaseController擴展了Controller。我得到這個錯誤是因爲構造方法在Auth方法被加載之前調用,或者我不知道如何調用它。 BaseController在構造函數中有以下代碼:'$ this-> permissions = GroupRoles :: where('id',Auth :: user() - > id) - > first();' –