【问题标题】:Is It Possible to Apply Laravel Policy to Both Routes and Custom Function?是否可以将 Laravel 策略应用于路由和自定义函数?
【发布时间】:2019-03-06 12:19:24
【问题描述】:

我有位置策略和一个 api 和一个自定义助手,我想使用相同的策略,

这里是例子:

1。读取位置记录的路由/API:

 Route::group(['middleware' => 'policy:view,location'], function () {
        // Read location
        Route::post('/locations/{location_id}', [
            'uses'       => 'LocationApiController@read'
        ]);
  });

2。自定义函数/助手读取位置记录

LocationHelper.php

/**
 * Class LocationHelper.
 */
class LocationHelper
{
    /** @var LocationRepositoryInterface */
    private $locationRepo;

    /**
     * ReminderHelper constructor.
     */
    public function __construct()
    {
        $this->locationRepo = App::make(LocationRepositoryInterface::class);
    }

    /**
     * @param int $locationId
     */
    public function readLocation($locationId)
    {
        $this->locationRepo->read($locationId);
    }
}

问题是:

调用位置读取路由/api 策略时将适用,而从LocationHelper.php 调用读取函数时将不适用

我想要的是对两者应用相同的政策。

有没有办法做到这一点?

【问题讨论】:

    标签: laravel policy


    【解决方案1】:

    您可以在检索用户后手动调用该策略。例如:

    $allowed = Auth::user()->can('view', Location::firstOrFail($locationId));
    

    如果不允许用户查看资源,则返回 403,如下所示:

    abort_unless($allowed, 403); 
    

    【讨论】:

    • 感谢您的宝贵时间,但是还有其他统一的解决方案吗?
    • 您可以创建自己的一些抽象并尝试在 LocationRepository 中添加此检查,例如让它实现一个自定义的 PolicyInterface,但我真的不认为它会让事情变得更容易。 Laravel 不提供开箱即用的自定义帮助方法的授权检查。
    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    相关资源
    最近更新 更多