在Blade View文件中使用Laravel策略授权



我试图为用户授权对视图文件中的某些内容限制,据我所知,可以在View File中使用的Laravel支持的AUTH(GATE,中间件)之间的唯一授权是(策略)auth。策略Auth是通过使用Laravel模型来工作的,而我的数据源不是模型,但我只是从某些Web服务中获取数据。

我创建了一个新策略(Isplatinum)

    <?php
namespace AppPolicies;
use AppUser;
use AppWebUser;
use IlluminateAuthAccessHandlesAuthorization;
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';
    }
}

注意:应用程序 Webuser不是模型文件,它只是从WebServices获取用户信息的类。

在我的刀片视图文件中

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

给出错误

Undefined variable: isPlatinum (View: 

我知道我应该仅将Laravel Policy Auth用于模型,在我的情况下,我应该使用的合适的Laravel Auth是什么?

您没有将isPlatinum变量传递给查看。您可以与所有视图共享数据:

创建服务提供商如下:

<?php
namespace AppProviders;
use IlluminateSupportFacadesView;
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()
    {
        //
    }
}

最新更新