php - Laravel 策略忽略查看、更新和删除,但创建工作正常

标签 php laravel authentication laravel-5 permissions

我正在创建我的第一个 Laravel 策略。我有一个基本新鲜的 laravel 5.4 项目,它有一个项目模型。我创建了一项名为 ProjectPolicy 的策略,但我无法让所有方法发挥作用。

如果我调用 $user->can('create', Project::class) 我会得到“here”转储并返回 true。但是,查看、创建和删除操作永远不会到达 ProjectPolicy。 “here”永远不会被转储,并且总是返回 false。我想不出或找不到任何理由来解释为什么一种政策方法有效而其他政策方法无效。我错过了什么?

应用\策略\ProjectPolicy.php

namespace App\Policies;

use App\User;
use App\Project;
use Illuminate\Auth\Access\HandlesAuthorization;

class ProjectPolicy
{
    use HandlesAuthorization;


    /**
     * Determine whether the user has a specific ability for projects.
     *
     * @param  \App\User  $user
     * @param  \App\Project  $project
     * @return mixed
     */
    public function before($user, $ability)
    {
        var_dump('here');
    }

    /**
     * Determine whether the user can view the project.
     *
     * @param  \App\User  $user
     * @param  \App\Project  $project
     * @return mixed
     */
    public function view(User $user, Project $project)
    {
        return true;
    }

    /**
     * Determine whether the user can create projects.
     *
     * @param  \App\User  $user
     * @return mixed
     */
    public function create(User $user)
    {
        return true;
    }

    /**
     * Determine whether the user can update the project.
     *
     * @param  \App\User  $user
     * @param  \App\Project  $project
     * @return mixed
     */
    public function update(User $user, Project $project)
    {
        return true;
    }

    /**
     * Determine whether the user can delete the project.
     *
     * @param  \App\User  $user
     * @param  \App\Project  $project
     * @return mixed
     */
    public function delete(User $user, Project $project)
    {
        return true;
    }
}

AuthServiceProvider.php

namespace App\Providers;

use App\Project;
use App\Policies\ProjectPolicy;
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 = [
        Project::class => ProjectPolicy::class,
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        //
    }
}

最佳答案

问题可能是您在调用 $user->can('view', Project::class) 时未传递项目实例。尝试调用 $user->can('view', $project) ,其中 $project 是所有那些在其函数定义中需要项目的方法的项目类的实例。

关于php - Laravel 策略忽略查看、更新和删除,但创建工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42941400/

相关文章:

php - json函数将数据保存到数据库时出错

php - 从 mysql 数据库提供 JQuery 自动完成功能

未找到 PHP 类 'COM'

python - 如何在身份验证后获取 LinkedIn 返回 URL

VBA Kerberos 身份验证

php - 如何通过 Codeception 在 Laravel 5 中使用数据库事务?

php - 如何从 laravel 中的数组值创建动态链接?

Laravel:如何为发送电子邮件的通知编写集成测试

php - 相当于 mysql 和 eloquent 查询生成器

api - 验证客户端和保护 RESTful api 的通用方法