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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在刀片视图文件中使用laravel策略授权相关的知识,希望对你有一定的参考价值。

我正在尝试为用户授权视图文件中的某些内容限制,因为我知道laravel支持的auth(门,中间件)之间唯一可以在视图文件中使用的授权是(policy)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';
    }

}

注意: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 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()
    {
        //
    }
}

以上是关于在刀片视图文件中使用laravel策略授权的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 路由提供包含非刀片(Html)的文件夹? [复制]

Laravel 刀片视图不工作,没有刀片工作

子视图刀片中的 Laravel 表单无法发布上传

使用 Zend Guard 编码的 Laravel 在浏览器中显示刀片视图文本

CSS文件未在laravel刀片视图中导入

Laravel 刀片模板不使用 slug 渲染