【问题标题】:laravel policy not calledlaravel 政策未调用
【发布时间】:2019-11-05 19:39:39
【问题描述】:

文档是隐藏了什么,还是隐藏了什么?

创建于

php artisan make:policy AdvertisementPolicy --model=Advertisement

class AdvertisementPolicy
{
    use HandlesAuthorization;

    /**
     * Determine whether the user can view any advertisements.
     *
     * @param  \App\User  $user
     * @return mixed
     */
    public function viewAny(User $user)
    {
        return false;

    }
public function view(User $user, Advertisement $advertisement)
{
    return false;

}

模型也是用 cli 创建的

namespace App;

class Advertisement extends Model
{

通过以下方式注册:

use App\Advertisement;
use App\Policies\AdvertisementPolicy;

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        Advertisement::class => AdvertisementPolicy::class,

这里是否有任何其他步骤可以使用 laravel 6 完成此策略注册?

【问题讨论】:

  • 您在哪里进行未使用策略的授权检查?
  • 目前此控制器无处可去,但用户已登录,我将在控制器中包含或稍后路由身份验证中间件,但我认为这不是策略的问题,因为没有调用策略(在最少)
  • 如果您没有在某处进行授权检查(特别是使用该模型),则永远不会使用该策略,所以不确定您的问题是什么......所以显示您在哪里做对某些操作的实际“授权”检查

标签: laravel laravel-6


【解决方案1】:

文档中没有隐藏任何东西。你只是没有仔细阅读文档。

请查看Authorizing Actions Using Policies 部分。

您的策略永远不会被调用,因为您不会在代码中的任何地方使用它。至少,如果您需要为控制器资源运行策略,则需要编写如下内容:

<?php

namespace App\Http\Controllers;

use App\Advertisement;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class AdvertisementController extends Controller
{
    public function __construct()
    {
        $this->authorizeResource(Advertisement::class, 'advertisement');
    }
}

【讨论】:

  • 如果有帮助很高兴 ;)
猜你喜欢
  • 2021-12-24
  • 2021-06-05
  • 2021-02-13
  • 1970-01-01
  • 2018-07-23
  • 2019-10-11
  • 1970-01-01
  • 2021-04-05
  • 2021-07-12
相关资源
最近更新 更多