繁体   English   中英

对于 Laravel 策略,Authorize 或 can 方法总是返回 false

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM