2017-12-22 6 views
0

뷰 파일에서 사용할 수있는 인증 (게이트, 미들웨어) 사이의 유일한 인증 인 것으로 알고 있으므로보기 파일의 일부 내용 제한에 대한 사용자 권한을 부여하려고합니다. (정책) 권한입니다. 정책 설정은 laravel 모델을 사용하여 작동합니다. 데이터 소스는 모델이 아니며 일부 웹 서비스에서 데이터를 가져 오는 중입니다. 앱 \ WEBUSER이는 웹 서비스에서 사용자 정보를 얻으려면, 그 클래스의, 모델 파일이 아닙니다 : laravel 정책 사용 블레이드보기 파일의 승인

나는 새로운 정책 (isPlatinum)

<?php 

namespace App\Policies; 

use App\User; 
use App\WebUser; 
use Illuminate\Auth\Access\HandlesAuthorization; 

class isPlatinum 
{ 
    use HandlesAuthorization; 

    /** 
    * Create a new policy instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
    } 

    public function view(WebUser $user){ 
     return $user->user->subscription->type === 'platinum'; 
    } 

} 

공지 사항을 만들었습니다. 내 블레이드보기 파일 제공

@cannot('view',$isPlatinum) 
     This page is for Platinum Users 
     @endcannot 

오류에

Undefined variable: isPlatinum (View: 

내가 내 상황에서, 단지 모델 Laravel 정책 인증을 사용하는 가정 것을 알고, 올바른 laravel의 인증에 내가 무엇을 사용해야하며 내부보기 파일을 사용할 수 있습니까?

답변

0

isPlatinum 변수를 보지 못했습니다. 당신은 share data with all views 할 수 있습니다 다음과 같이

는 서비스 공급자 만들기 : 내가 생각하는 방식은 저를 위해 최선의 방법입니다

<?php 

namespace App\Providers; 

use Illuminate\Support\Facades\View; 

class AuthServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     // method to fetch the webUser? 
     // $webUser = ; 
     View::share('isPlatinum', $webUser->user->subscription->type === 'platinum'); 
    } 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 
+0

감사합니다, 이것은, 난 당신이 언급 정확히 무엇을했는지, 오류 표시 응답 : { "오류 ":"token_not_provided "}, 토큰은 App \ WebUser의 웹 서비스 요청에 제공되고 토큰 값은 Session :: get ('token'), dd (Session :: get ('token'))는 토큰을 반환합니다. 어떤 문제없이 AuthServiceProvider가 WebUser 내부의 Session 값으로 작업하지 않는지 궁금합니다. – user2873860

+0

https://laracasts.com/discuss/channels/general-discussion/laravel-5-session-data-is-not-accessible-in-the-app-boot-process를 참조하십시오. 공급자 부팅 방법은 모든 제공 업체가 등록되므로 세션이 작동해야합니다. 내 경우 WebUser 토큰 값은 세션 – user2873860

+0

https://stackoverflow.com/questions/34577946/how-to-retrieve-session-data-in-service-providers-in-laravel – Ben