我正在尝试为用户授权视图文件中的某些内容限制,因为我知道laravel支持的auth(门,中间件)之间唯一可以在视图文件中使用的授权是(policy)auth。策略auth正在使用laravel模型,而我的数据源不是模型,我只是从一些Web服务获取数据。
我创建了一个新政策(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';
}
}
注意:App \ WebUser不是模型文件,它只是一个从webservices获取用户信息的类。
在我的刀片视图文件中
@cannot('view',$isPlatinum)
This page is for Platinum Users
@endcannot
给出错误
Undefined variable: isPlatinum (View:
我知道我应该只为模型使用Laravel Policy Auth,在我的情况下,我应该使用什么是正确的laravel auth我可以使用的是内部视图文件?
你没有传递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()
{
//
}
}