在刀片视图文件中使用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)的文件夹? [复制]