gpt4 book ai didi

laravel - 如何在策略中允许 nova 资源操作

转载 作者:行者123 更新时间:2023-12-02 16:54:50 24 4
gpt4 key购买 nike

新星 2.0拉维尔 5.8

我有一个 nova 资源 Document(包含文件 url、相关的外键和标题),我已经为它定义了 policycreateupdate false 和所有其他设置为 true,PDF 是从另一个资源生成的,所以我不需要允许它被创建或编辑,现在一切正常,但是另一个 在此文档资源上的操作 我正在尝试下载这些文件,但出现错误“抱歉,您无权采取此操作”,那么如何允许此操作 关于策略

文档策略类

<?php

namespace App\Policies;

use App\User;
use App\Models\Document;
use Illuminate\Auth\Access\HandlesAuthorization;

class DocumentPolicy
{
use HandlesAuthorization;

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

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

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

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

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

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

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

public function download(User $user, Document $document)
{
return true;
}
}

最佳答案

您收到错误的原因是您的 update 方法在您的策略中返回 false。

默认情况下,如果更新为假,Nova 将不允许该操作。要对此进行测试,您可以尝试将其设置为 true 并再次进行测试。

要解决此问题,您必须更改注册操作的方式以添加自定义回调来处理用户是否可以运行操作,如下所示:

public function actions(Request $request)
{
return [
(new DownloadDocument)->canRun(function ($request, $document) {
return $request->user()->can('download', $document);
}),
];
}

这样,它将检查文档策略中的 download 方法,而不是操作的 update 方法。

更多信息:https://nova.laravel.com/docs/2.0/actions/registering-actions.html#authorizing-actions-per-resource

关于laravel - 如何在策略中允许 nova 资源操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56872200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com