在 Laravel Post 中授权资源控制器不起作用?

2023-12-08

我创建了一个 ProductPolicy,其中有:

<?php

namespace App\Policies;

use App\Models\Product;
use App\Models\Vendor;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class ProductPolicy
{
    use HandlesAuthorization;

public function before($user, $ability){
    if($user->roles == 'admin' || $user->roles == 'editor'){
        return true;
    }
}

public function viewAny(User $user)
{
    return true;
}

public function view(User $user, Product $product)
{
    $vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first();
    return $vendor_id === $product->vendor_id;
}

public function create(User $user)
{
    return true;
}

public function update(User $user, Product $product)
{
    $vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first(); 
    return $vendor_id === $product->vendor_id;
}

public function delete(User $user, Product $product)
{
    $vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first();
    return $vendor_id === $product->vendor_id;
}

public function restore(User $user, Product $product)
{
    //
}

public function forceDelete(User $user, Product $product)
{
    //
}
}

我允许用户编辑、更新、删除该产品(如果他们拥有该产品)。根据laravel文档,如果我们使用了资源控制器,我们可以使用authorizeResource方法。这就是为什么我添加了这个:

$this->authorizeResource(Product::class, 'products');

in the ProductController

但是当我尝试删除、编辑特定供应商拥有的产品时,它说,403授权。更重要的是我正在使用view

@foreach($allProducts as $productLists) 
@can('view', $productLists)
      codes....
   @endcan
@endforeach

但是,如果我这样做

public function viewAny(User $user)
{
    return false;
}

代替

public function viewAny(User $user)
{
    return true;
}

即使是管理员和编辑也无法添加、编辑、更新和查看产品。走到这里有什么问题吗?

Edit In my web.php我使用了如下资源路由:

Route::resource('products','ProductController');

我认为外来字段类型的问题就像字符串,而不是整数,并且您使用 === 运算符而不是 ==。

所以有两种可能的解决方案。

使用 == 而不是 == 运算符

或者在比较之前将字符串转换为整数

返回 $vendor_id === (int)$product->vendor_id;

和authorizeResource方法接受模型的类名作为其第一个参数,但您使用了错误的名称(产品),它应该是“产品”。 我认为应该是(从产品中删除 s)

$this->authorizeResource(Product::class, '产品');

<?php

namespace App\Policies;

use App\Models\Product;
use App\Models\Vendor;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class ProductPolicy
{
    use HandlesAuthorization;

    public function before($user, $ability){
        if($user->roles == 'admin' || $user->roles == 'editor'){
            return true;
        }
    }

    public function viewAny(User $user)
    {
        return true;
    }

    public function view(User $user, Product $product)
    {
        $vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first();
        return $vendor_id == $product->vendor_id; // issue here
    }

    public function create(User $user)
    {
        return true;
    }

    public function update(User $user, Product $product)
    {
        $vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first(); 
        return $vendor_id === (int)$product->vendor_id; // issue here
    }

    public function delete(User $user, Product $product)
    {
        $vendor_id = Vendor::where('user_id', $user->id)->pluck('id')->first();
        return $vendor_id === (int)$product->vendor_id; // issue here
    }

    public function restore(User $user, Product $product)
    {
        //
    }

    public function forceDelete(User $user, Product $product)
    {
        //
    }
}

您可以在任何策略函数(您比较事物的地方)中运行以下语句,然后您就会明白了。

echo gettype($vendor_id).", ".gettype($product->vendor_id);
die;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Laravel Post 中授权资源控制器不起作用? 的相关文章

  • Laravel - 如何使用供应商类?

    我想在 m paths php 文件上使用移动检测 我已将该包添加为composer json 中的必需项 并将其安装在供应商文件中 我现在该如何使用它 我尝试了这个答案 但没有成功 因为找不到该课程 Laravel 4 使用供应商类 ht
  • 如何在 Chart.js 中从最高到最低对数据进行排序

    我在如何使用 Chart js 对数据从高到低进行排序时遇到一些问题 我使用 Laravel 并使用 Chart js 来显示我的数据 但是我不知道如何进行操作以将 Chart js 中的最高值排序为最低值 数据 My code var c
  • 雄辩的 laravel:如何从 ->get() 获取行数

    我在弄清楚如何使用这个集合来计算行数时遇到了很多麻烦 wordlist DB table wordlist gt where id lt correctedComparisons gt get 我努力了adding gt count 但没有
  • Laravel Sanctum + Nuxt JS 我无法通过 CORS

    在开始之前 我想说我搜索并尝试了很多方法 但似乎没有一个能正常工作 我还创建了一个新的 Laravel 安装 但仍然没有成功 问题是 CORS 我总是被 CORS 阻止 该设置使用Laravel Valet Laravel 应用程序运行于h
  • ajax 请求中的 laravel TokenMismatchException

    我正在使用资源组并使用此过滤器来解析TokenMismatchException问题 Route filter csrf function route request if strtoupper request gt getMethod G
  • PHP - 解析具有固定列宽的文本文件

    我是 PHP 和 Laravel 的新手 我需要打开文件并解析内容以将它们传递到数据库 文本文件具有固定的列宽 它没有分隔符或标题 我认为使用子字符串并将每个子字符串分配给变量将是正确的方法 但我仍在学习该语言的过程中 我不知道如何实现这一
  • Laravel 4 中检索特定日期范围内数据记录的查询

    我有一张桌子有record date以及对应的amount字段 我试图检索按日期月份分组的总金额 我是 Laravel 新手 在普通 php 中我会使用以下 mysql 查询 gt SELECT MONTH record date YEAR
  • Laravel 模型访问器从缓存中获取 - 性能增强

    我在数据库中有一个项目列表 每个项目都可以选择被否决或赞成 这些投票与其他项目字段一起存储在 MySql 中 例如这样的事情 Schema create items function table table gt increments id
  • Laravel 4,如何在 Route::controller() 上应用过滤器

    我知道我能做到 Route get foo bar array before gt filter uses gt Controller bar 应用路由一些过滤器 我也知道 Route group 方法 无论如何 如果我想以这种方式定义一个
  • Laravel中间件获取路由参数

    我正在编写诸如 学校俱乐部管理系统 之类的东西 并遇到一些资源授权问题 假设有club and club有经理 我想检查用户是否是经理club在他可以使用中间件管理它之前 使用 Laravel 5 2 My router看起来像这样 Rou
  • Laravel 5:在没有 Composer 的情况下安装 Form 和 HTML 类

    我有兴趣在 Laravel 5 上安装 Form 和 HTML 类 而不需要 Composer 我怎样才能做到这一点 对于那些想说服我使用作曲家的人 1 我想通过自己手动至少一次来看看它的作用 2 我的主机上没有作曲家 3 使用compos
  • Laravel 自定义授权

    我在这里进行登录验证 LoginData Input except array token if Auth attempt LoginData return success 我的表不同 所以这里我更改表名称auth php table gt
  • 如何确定 Laravel 4.2 中模型是否使用软删除

    如何确定 Laravel 4 2 中模型是否使用软删除 In Laravel API http laravel com api class Illuminate Database Eloquent Model html 我找到了 isSof
  • 如何在 Laravel 中更改应用程序的命名空间?

    我无法在 Laravel 5 8 中更改应用程序的命名空间 我正在使用 artisan 来更改它 php artisan app name TestApp 结果是 中没有定义命令app 命名空间 看着php artisan你应该有一个php
  • Laravel - 调用未定义的方法 Illuminate\Database\Query\Builder::user()

    我正忙于Laravel 从头开始 更新记录和预加载 https laracasts com series laravel 5 from scratch episodes 10 我已经遵循了该教程 但在尝试在 CardsController
  • Angular2 + Laravel 与实时和 WebSockets

    我构建了一个应用程序 并计划与 Angular 2 和 laravel 进行实时战斗 例如 你按下 攻击 按钮 你的对手就会实时看到他的生命在下降 我的应用程序构建有 前端 角2 Backend PHP Laravel 5 2 现在我正在寻
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • 使用键模式从 Laravel 4 缓存中删除?

    对于我的包 我们使用 Laravel 缓存 我们创建的每个缓存键都有前缀 所以我们得到mypackage config mypackage md5ofafilename有时我需要刷新我的包创建的所有缓存文件 问题是什么 我只知道缓存键的模式
  • 如何将 Laravel 5.4 与 Angular 4 集成

    我知道如何创造完整的拉拉维尔 5 4自己的项目 我也知道如何使用创建 SPA角4 Problem 我不知道如何将 Laravel 与 Angular 集成 另外 我想使用 Laravel 5 4 作为后端 使用 Angular 4 作为前端
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad

随机推荐

  • 为什么“隔空敲击”手势在我的 Unity/MRTK 应用程序中的 HoloLens1 上不起作用?

    我有一个 Unity 应用程序 我想将其与 Microsoft 混合现实工具包 MRTK 集成 当我将 MRTK v2 1 或 v2 2 包添加到 Unity 项目时 我可以在 Unity 编辑器中模拟 隔空敲击 手势 并且应用程序会注册该
  • 新信号连接到旧插槽而不是单独的插槽

    我正在尝试标记数据跟踪的 x 跨度 并使用 tagNames 起始 x 值和结束 x 值填充表 我正在使用 突出显示 对象的字典来跟踪 x 跨度 以防以后需要对其进行编辑 增加或减少 字典将 x 起始值映射到突出显示对象 因为 x 起始值应
  • 从 Bigquery 中的时间戳提取日期:一种更好的方法

    向 Bigquery 专家提出一个简短的问题 以下是使用标准 SQL 从 Bigquery 中的时间戳中提取日期的两种方法 standardSQL 1 DATE TIMESTAMP MILLIS CAST timestamp AS INT6
  • 当我需要引用自身时如何设计结构[重复]

    这个问题在这里已经有答案了 My 上一个问题告诉我 Rust 不能在结构中引用自身 所以我的问题是 当我需要引用自身时如何设计一个结构体 我们可以以这个结构体为例 struct SplitByChars lt a gt seperator
  • 当用户按下设备音量键时,搜索栏拇指位置发生变化

    我使用搜索栏来控制设备的音量 我只需在触摸板上拖动搜索栏的拇指即可更改设备的音量 但是当用户按下音量 侧面 键时 我需要相应地设置搜索栏拇指位置 我该怎么做 请告诉我 Thanks 我通过重写 onkeydown 事件得到了解决方案 Ove
  • Pygame set_alpha 不适用于尝试的背景淡入淡出

    我一直在尝试创建一个简短的代码 用于可以淡入和从黑色淡出的项目 但由于某种原因 只有淡入功能在工作 而淡出功能或多或少被跳过 通过给他们参数 我确认问题出在第二个函数中 并且透明度根本没有改变 这是我的代码 import pygame sc
  • 未找到带点(IP 地址)的路由,返回 404

    I use Lumen 5 4 这就是我的路线设置方式 app gt get ip ip GeoIpController class show The ip 路由参数应该是一个IP地址 其中带点 然而 当路线中有点时 似乎就会出现问题 它返
  • CharBuffer 位于内存映射的 ByteBuffer 之上,无需使用大量堆空间

    我正在编写一个java代码来在一个大的txt文件 6 8Gb 中搜索电子邮件地址和密码 我已经编写了代码 它可以处理 200Mb txt 文件并给出输出 但是当我输入 500Mb 文件时 它显示以下错误 Exception in threa
  • TensorFlow:“ValueError:没有为任何变量提供梯度”

    我正在张量流中实现 DeepMind 的 DQN 算法 并在我调用的线路上遇到此错误optimizer minimize self loss ValueError No gradients provided for any variable
  • PHP 表单 - 提交时停留在同一页面

    我有一个位于文件中的 PHP 表单contact html 该表格是从文件处理的processForm php 当用户填写表单并单击提交时 processForm php发送电子邮件并引导用户至 processForm php该页面上有一条
  • 将多个 IIS7 重写规则(重定向)合并为一个

    我使用iis7的URL重写模块来完成几件事 301重定向规则从非www到www 301 将规则 info 重定向到 com 已移至我的域的 com 版本 301 从旧页面重定向规则 例如 page name asp 改为 page name
  • Android Facebook 风格幻灯片

    新的 Facebook 应用程序及其导航非常酷 我只是想看看如何在我的应用程序中模拟它 任何人都知道如何实现它 单击左上角按钮后 页面会滑动并显示以下屏幕 Youtube 视频 我自己尝试过这个 我能找到的最好方法是使用 FrameLayo
  • 如何在 ruby​​mine 中停止/终止服务器(开发)

    这里是新手 我在 ruby mine 中创建了一个 Rails 项目来运行公共文件夹中的默认 index html 我按下了 shift F10 键 这与终端的 Rails 服务器相同 这就是我得到的 home bubble rvm rub
  • Java:转义 XML 文本内容而不是整个文本

    我想发送下面的 XML 请求 文本内容应该被转义 但标签不应该被转义 我试过了使用下面的转义逻辑 String str escapeXml11 req 然而 我的整个请求都被逃脱了 因此 它不再是有效的 XML 我原来的字符串 String
  • 在 Flexbox 中组合行和列

    我有三个元素article 照片 类别 然后是帖子信息 我试图弄清楚如何让类别元素堆叠在帖子信息列的顶部 2 在 3 的顶部 如果您正在查看所附照片 因此它看起来像两个 50 的列 即使有是三个弹性元素 flexbox display fl
  • 如何更改 gWidgets RGtk2 中鼠标光标的形状?

    在gWidgets中的ggraphics绘图区域中 将鼠标光标更改为 GDK TCROSS 但我想要与gwindow GDK LEFT PTR 相同的鼠标光标 library gWidgets library gWidgetsRGtk2 l
  • 球拍中的树形折叠

    我是 Racket 的初学者 我有这样的问题 定义一个结构 node 其中包含以下字段 value left middle right 该结构表示树结构中的节点 这些字段包含存储在节点 左子树中的值 分别为中子树和右子树 如果一个子树 不存
  • EntityFramework Core 自动迁移

    有没有代码可以实现自动迁移Entity Framework core code first在 asp net core 项目中 我只是在 MVC4 5 中添加 Database SetInitializer new MigrateDatab
  • Python 向量化嵌套 for 循环

    我希望能够帮助您找到和理解一种 Pythonic 方法来优化嵌套 for 循环中的以下数组操作 def func a b radius Return 0 if a gt b otherwise return 1 if distance eu
  • 在 Laravel Post 中授权资源控制器不起作用?

    我创建了一个 ProductPolicy 其中有