[英]Authorize or can methods always return false for laravel policy
我在 Laravel 中设置策略时遇到问题。 我正在使用与 Laravel 策略概念集成的 Laravel voyager 管理面板。 我已经为内容模型创建了策略并将其分配给了 Content BREAD。 只是为了检查结果,我只是在视图函数中返回 true。 然而,它仍然返回 false。
这是 ContentPolicy 类的一个片段:
/*
* Determine whether the user can view the content.
*
* @param \App\User $user
* @param \App\Content $content
* @return mixed
*/
public function view(User $user, Content $content)
{
return true;
}
在 ContentController 中:
public function view(Request $request)
{
$content=Content::all();
return var_dump($this->authorize("view",$content));
}
我在这里注册了我的保单
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Content::class => ContentPolicy::class
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
//
}
}
值得注意的是,'browse_admin' 在这种情况下适用于 laravel voyager。
我感谢您的帮助。 提前致谢
根据Laravel 文档,您应该像这样在AuthServiceProvider
注册您的策略:
<?php
namespace App\Providers;
use App\Content;
use App\Policies\ContentPolicy;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
Content::class => ContentPolicy::class,
];
/**
* Register any application authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//
}
}
您是否在您的政策中加入了before
方法?如果是,请删除它。
我遇到了同样的问题并修复了它,您需要将此添加到您的政策中,这是 Voyager 检查的内容。
public function browse(){
return true;
}
public function add(){
return true;
}
public function delete(){
return true;
}
public function edit(){
return true;
}
public function read(){
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.