HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/javago-portal-updates/vendor/yajra/laravel-datatables-html/src/Html/HasAuthorizations.php
<?php

namespace Yajra\DataTables\Html;

use Illuminate\Contracts\Auth\Access\Authorizable;

trait HasAuthorizations
{
    /**
     * Flag to check if user is authorized to use the button.
     *
     * @var bool
     */
    protected bool $authorized = true;

    /**
     * Make a button if condition is true.
     *
     * @param  callable|bool  $condition
     * @param  array|string  $options
     * @return static
     */
    public static function makeIf(callable|bool $condition, array|string $options = []): static
    {
        if (is_callable($condition)) {
            $condition = value($condition);
        }

        if ($condition === true) {
            return static::make($options);
        }

        return app(static::class)->authorized(false);
    }

    /**
     * Set authorization status of the button.
     *
     * @param  callable|bool  $bool
     * @return static
     */
    public function authorized(callable|bool $bool): static
    {
        $this->authorized = (bool) value($bool);

        return $this;
    }

    /**
     * Make a button if the user is authorized.
     *
     * @param  string  $permission
     * @param  array|string  $options
     * @param  Authorizable|null  $user
     * @return static
     */
    public static function makeIfCan(string $permission, array|string $options = [], Authorizable $user = null): static
    {
        if (is_null($user)) {
            $user = auth()->user();
        }

        if ($user instanceof Authorizable && $user->can($permission)) {
            return static::make($options);
        }

        return static::make([])->authorized(false);
    }

    /**
     * Make a button if the user is not authorized.
     *
     * @param  string  $permission
     * @param  array|string  $options
     * @param  Authorizable|null  $user
     * @return static
     */
    public static function makeIfCannot(
        string $permission,
        array|string $options = [],
        Authorizable $user = null
    ): static {
        if (is_null($user)) {
            $user = auth()->user();
        }

        if ($user instanceof Authorizable && ! $user->can($permission)) {
            return static::make($options);
        }

        return app(static::class)->authorized(false);
    }

    /**
     * Convert the Fluent instance to an array.
     *
     * @return array
     */
    public function toArray(): array
    {
        if (! $this->isAuthorized()) {
            return [];
        }

        return parent::toArray();
    }

    /**
     * Check if instance is authorized
     *
     * @return bool
     */
    public function isAuthorized(): bool
    {
        return $this->authorized;
    }
}