代码之家  ›  专栏  ›  技术社区  ›  Pankaj

请求类中的authorize方法能否为HandlesAuthorization特征返回自定义消息?

  •  9
  • Pankaj  · 技术社区  · 7 年前

    HandlesAuthorization trait ,默认情况下提供默认消息。有没有办法返回自定义消息?我在中看到了authorize方法 Request class 可以 return boolean 仅限值。

    class UpdateRoleRequest extends Request
    {
        private $UserPermissionsSession;
    
        public function __construct(IRole $Role) {
            $this->UserPermissionsSession = new UserPermissionsSession();
        }
    
        public function authorize() {
            $UserID = \Auth::user()->UserID;
            return $this->UserPermissionsSession->CheckPermissionExists($UserID);
        }
    
    }
    
    2 回复  |  直到 7 年前
        1
  •  10
  •   Marcin Nabiałek    7 年前

    我相信你不应该看 HandlesAuthorization 特质你需要做的就是实施 failedAuthorization 方法。

    FormRequest 类定义如下:

    /**
     * Handle a failed authorization attempt.
     *
     * @return void
     *
     * @throws \Illuminate\Auth\Access\AuthorizationException
     */
    protected function failedAuthorization()
    {
        throw new AuthorizationException('This action is unauthorized.');
    }
    

    因此,您只需在 UpdateRoleRequest 例如,如下所示:

    protected function failedAuthorization()
    {
        throw new \Illuminate\Auth\Access\AuthorizationException('User has to be an admin.');
    }
    
        2
  •  1
  •   Fanmade    3 年前

    为任何其他对此感到疑惑的人提供一个回答“Pooria Honarmand”问题的解决方案;
    authorize

    private bool$hasMissingClientId=false;

    public function authorize(): bool
    {
        // several other checks
    
        if (empty($user->client_id)) {
            $this->hasMissingClientId = true;
            return false;
        }
        return true;
    }
    
    protected function failedAuthorization()
    {
        if ($this->hasMissingClientId) {
            throw new AuthorizationException('User has to be assigned to specific client.');
        }
        parent::failedAuthorization();
    }
    
    推荐文章