在刀片视图文件中使用laravel策略授权

问题描述 投票:0回答:1

我正在尝试为用户授权视图文件中的某些内容限制,因为我知道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我可以使用的是内部视图文件?

php laravel authorization
1个回答
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()
    {
        //
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.