Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 公众可通过Laravel政策访问_Php_Laravel_Authentication - Fatal编程技术网

Php 公众可通过Laravel政策访问

Php 公众可通过Laravel政策访问,php,laravel,authentication,Php,Laravel,Authentication,我想公开一些Analysis的条目。我试图用政策来实施它,但失败了。我想这是因为每次我尝试在没有授权用户的情况下访问时,AuthServiceProvider都会失败,出现AccessDeniedHttpException AuthServiceProvider class AuthServiceProvider extends ServiceProvider { protected $policies = [ Analysis::class => AnalysisPolicy

我想公开一些
Analysis
的条目。我试图用政策来实施它,但失败了。我想这是因为每次我尝试在没有授权用户的情况下访问时,
AuthServiceProvider
都会失败,出现
AccessDeniedHttpException

AuthServiceProvider

class AuthServiceProvider extends ServiceProvider
{
  protected $policies = [
    Analysis::class => AnalysisPolicy::class
  ];

  public function boot()
  {
    $this->registerPolicies();
  }
}
public function show(int $analysis)
{
    $ana = Analysis::find($analysis);

    $this->authorize('view', $ana);

    ...
}
分析策略

public function view(User $user, Analysis $analysis)
{
    if($analysis->demo === true){
        return true;
    }
    return $user->id === $analysis->user_id;
}
分析控制器

class AuthServiceProvider extends ServiceProvider
{
  protected $policies = [
    Analysis::class => AnalysisPolicy::class
  ];

  public function boot()
  {
    $this->registerPolicies();
  }
}
public function show(int $analysis)
{
    $ana = Analysis::find($analysis);

    $this->authorize('view', $ana);

    ...
}
我试图创建一个新的服务提供者,但这也不起作用,因为如果不从AuthServiceProvider扩展,我无法调用RegisterPolicys函数

基本上,我现在只想检查
demo
属性是否为true

编辑:

我的快速修复表单现在只是检查控制器是否是演示。但在我看来,这不是一个很好的解决方案,因为我认为策略的目标应该是我在控制器中没有访问管理。所以我想找到一个更好的解决办法

if(!$ana->demo){
    $this->authorize('view', $ana);
}

好的,所以你应该在提问之前阅读最新版本的发行说明

从Laravel 5.7开始,有一个适当的解决方案:

public function update(?User $user, Post $post)
{
    return $user->id === $post->user_id;
}
()

通过声明$user optional,来宾用户的值为null,可以在策略中处理

在路由或控制器上有哪些中间件?当前没有用于路由的中间件。我刚刚编辑了一个修复程序,它确实可以工作,所以我认为这不是中间件的问题。是的,出现的问题是除了用户实例(根据方法定义)之外,没有代表来宾的用户实例。请参阅此处的讨论:非常感谢链接。抱歉,我只搜索了政策,没有搜索盖茨。抱歉,我只是搜索了各种问题和PRs,发现了以下内容:(没有放在这里太有趣了)