Public 可通过 Laravel 政策访问
Public Accessible with Laravel Policy
我想公开 Analysis
的一些条目。我试图用策略来实现它但失败了。我认为这是因为每次我尝试在没有授权用户的情况下访问时 AuthServiceProvider
都会失败 AccessDeniedHttpException
。
AuthServiceProvider
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
Analysis::class => AnalysisPolicy::class
];
public function boot()
{
$this->registerPolicies();
}
}
分析策略
public function view(User $user, Analysis $analysis)
{
if($analysis->demo === true){
return true;
}
return $user->id === $analysis->user_id;
}
分析控制器
public function show(int $analysis)
{
$ana = Analysis::find($analysis);
$this->authorize('view', $ana);
...
}
我试图只创建一个新的服务提供者,但这也不起作用,因为我无法在不从 AuthServiceProvider 扩展的情况下调用 registerPolicies 函数。
基本上,我现在只想检查 demo
属性是否为真。
编辑:
我的快速修复表单现在只是检查控制器是否是演示。但在我看来,这不是一个很好的解决方案,因为我认为策略的目标应该是我在控制器中没有访问管理。所以我很想找到一个更好的解决方案。
if(!$ana->demo){
$this->authorize('view', $ana);
}
好的,事实证明,在提问之前,您应该始终阅读最新 Laravel 版本的发行说明。
从 Laravel 5.7 开始,有一个合适的解决方案:
public function update(?User $user, Post $post)
{
return $user->id === $post->user_id;
}
(https://laravel.com/docs/5.7/authorization#writing-policies)
通过声明 $user 可选,它对来宾用户来说是空的,可以在策略中处理。
我想公开 Analysis
的一些条目。我试图用策略来实现它但失败了。我认为这是因为每次我尝试在没有授权用户的情况下访问时 AuthServiceProvider
都会失败 AccessDeniedHttpException
。
AuthServiceProvider
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
Analysis::class => AnalysisPolicy::class
];
public function boot()
{
$this->registerPolicies();
}
}
分析策略
public function view(User $user, Analysis $analysis)
{
if($analysis->demo === true){
return true;
}
return $user->id === $analysis->user_id;
}
分析控制器
public function show(int $analysis)
{
$ana = Analysis::find($analysis);
$this->authorize('view', $ana);
...
}
我试图只创建一个新的服务提供者,但这也不起作用,因为我无法在不从 AuthServiceProvider 扩展的情况下调用 registerPolicies 函数。
基本上,我现在只想检查 demo
属性是否为真。
编辑:
我的快速修复表单现在只是检查控制器是否是演示。但在我看来,这不是一个很好的解决方案,因为我认为策略的目标应该是我在控制器中没有访问管理。所以我很想找到一个更好的解决方案。
if(!$ana->demo){
$this->authorize('view', $ana);
}
好的,事实证明,在提问之前,您应该始终阅读最新 Laravel 版本的发行说明。
从 Laravel 5.7 开始,有一个合适的解决方案:
public function update(?User $user, Post $post)
{
return $user->id === $post->user_id;
}
(https://laravel.com/docs/5.7/authorization#writing-policies)
通过声明 $user 可选,它对来宾用户来说是空的,可以在策略中处理。