From: Vincent Vanwaelscappel Date: Wed, 11 Feb 2026 16:50:43 +0000 (+0100) Subject: wip #7868 @1 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=9703ca8a684d459952713a985bc9f6c5b7e54b90;p=fluidbook-toolbox.git wip #7868 @1 --- diff --git a/app/Fields/ShortLinkFluidbooks.php b/app/Fields/ShortLinkFluidbooks.php index 83f29a502..7237d88b6 100644 --- a/app/Fields/ShortLinkFluidbooks.php +++ b/app/Fields/ShortLinkFluidbooks.php @@ -2,6 +2,7 @@ namespace App\Fields; +use App\Models\FluidbookPublication; use Cubist\Backpack\Magic\Fields\Textarea; class ShortLinkFluidbooks extends Textarea @@ -10,4 +11,18 @@ class ShortLinkFluidbooks extends Textarea protected $_columnViewNamespace = 'columns'; protected $_adminType = 'shortlinks_fluidbooks'; protected $_viewNamespace = 'fields'; + + public static function filterLinks($links) + { + if (is_string($links)) { + $links = json_decode($links, true); + } + $res = []; + foreach ($links as $link) { + if (!isset($res[$link['fluidbook_id'] . '_' . $link['link_id']]) && FluidbookPublication::hasPermission($link['fluidbook_id'], 'read')) { + $res[$link['fluidbook_id'] . '_' . $link['link_id']] = $link; + } + } + return $res; + } } diff --git a/app/Models/ShortLink.php b/app/Models/ShortLink.php index 79466622a..9ca33b632 100644 --- a/app/Models/ShortLink.php +++ b/app/Models/ShortLink.php @@ -35,7 +35,7 @@ class ShortLink extends ToolboxModel public $incrementing = false; protected $keyType = 'string'; - protected static $_permissionBase = 'linkshortener'; + protected static $_permissionBase = 'shortlink'; public function setFields() { diff --git a/app/Models/Traits/Permissions.php b/app/Models/Traits/Permissions.php index 2c5ac3631..d5b21cd89 100644 --- a/app/Models/Traits/Permissions.php +++ b/app/Models/Traits/Permissions.php @@ -61,20 +61,26 @@ trait Permissions return false; } - if ($user->hasPermissionTo(static::$_permissionBase . ':admin')) { - return true; - } - if (!$user->hasPermissionTo(static::$_permissionBase . ':' . $permission)) { - return false; - } - if ($id instanceof FluidbookPublication) { + $pubId = $id instanceof FluidbookPublication ? $id->id : $id; + + return cache()->remember('fluidbook_permission_' . $user->id . '_' . $permission . '_' . $pubId, 360, function () use ($user, $permission, $id) { + if ($user->hasPermissionTo(static::$_permissionBase . ':admin')) { + return true; + } + if (!$user->hasPermissionTo(static::$_permissionBase . ':' . $permission)) { + return false; + } + if ($id instanceof FluidbookPublication) { + return true; + } + $entry = static::find($id); + if (null === $entry) { + return false; + } return true; - } - $entry = static::find($id); - if (null === $entry) { - return false; - } - return true; + }); + + } } diff --git a/resources/views/columns/shortlinks_fluidbooks.blade.php b/resources/views/columns/shortlinks_fluidbooks.blade.php index 6180c8ee9..f909433ce 100644 --- a/resources/views/columns/shortlinks_fluidbooks.blade.php +++ b/resources/views/columns/shortlinks_fluidbooks.blade.php @@ -5,4 +5,4 @@ $messages=\App\Http\Controllers\Admin\Operations\FluidbookCollection\AuditLinksOperation::getCodesMessages(); @endphp -{{count(json_decode($value))}} +{{count(\App\Fields\ShortLinkFluidbooks::filterLinks($value))}} diff --git a/resources/views/fields/shortlinks_fluidbooks.blade.php b/resources/views/fields/shortlinks_fluidbooks.blade.php index 6c2db5832..0a688e3d4 100644 --- a/resources/views/fields/shortlinks_fluidbooks.blade.php +++ b/resources/views/fields/shortlinks_fluidbooks.blade.php @@ -8,7 +8,7 @@ @include('crud::fields.inc.translatable_icon')