Laravel 5.3在Policy失败时传递AuthorizationException消息


易米烊光
2025-03-14 08:50:51 (3天前)



调节器
</跨度>
使用try-catch,然后重新抛出一个带有特定字符串的自定义异常,这看起来有点冗长

2)中止(403,’…’)

政策
</跨度>
返回之前,这似乎有点hacky因为我试图找到一种干净的方法来覆盖AuthorizationException以获取一个动态字符串,该字符串可以在传递时返回

政策
</跨度>
失败。

我知道我能做的事情是:

1)包裹

政策
</跨度>
在…中

3 条回复
  1. 0# v-star*위위 | 2019-08-31 10-32



    我认为考虑策略的最佳方式是它们只是一种分离控制器逻辑的方法,并将所有与授权相关的逻辑移动到单独的文件中。从而

    abort(403, ‘message’)




    在大多数情况下,这是正确的方法。



    唯一的缺点是您可能希望某些策略是仅用于业务逻辑的“纯”逻辑,因此不具有任何响应控制。它们可以分开,并且可以使用评论系统来区分它们。


  2. 1# 甲基蓝 | 2019-08-31 10-32




    Laravel确实可以选择传递参数来自定义错误


    authorize()


    方法


    Controller


    </强>
    通过访问


    Gate

    Class的
    </强>
    实施


    GateContract

    </强>
    由…提供


    Gate

    正面
    </强>



    然而,似乎他们忘了把这些论点传递给了


    allow()


    /


    deny()


    负责返回错误消息的方法,在


    HandlesAuthorization

    特征
    </强>






    您需要按照以下步骤传递这些参数:





    1. 修改


      authorize

      </强>
      方法


      vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php


      文件




      1. public function authorize($ability, $arguments = []) {
        $result = $this->raw($ability, $arguments);
        if ($result instanceof Response) {
        return $result;
        }

      2. return $result ? $this->allow() : $this->deny($arguments);
        }

      3.     </code>
      4.   </pre>
      5. </LI>
      6. <LI>
      7.   <P>
      8.     呼叫
      9.     的<strong>
      10.        <code>
      11.         authorize
      12.       </code>
      13.     </强>
      14.      来自控制器的额外参数,即:您的自定义
      15.     <EM>
      16.        <code>
      17.         $message
      18.       </code>
      19.     </EM>
      20.       - 
      21.   </p>
      22.    <pre>
      23.     <code>
      24.       $message = "You can not delete this comment!";
      25. $response = $this->authorize(‘delete’, $message);

      26.     </code>
      27.   </pre>
      28. </LI>
      29. </醇>




        我做了一个

        拉请求

        为了解决这个问题,希望有人能尽快合并。


登录 后才能参与评论