feat(auth): adding patron role with new permission to bypass feature flags (#542)

* feat(auth): adding patron role with new permission to bypass feature flags

* style: fix StyleCI finding

* fix: wiki editors shouldn't have extended CRUD permissions
This commit is contained in:
paranarimasu
2023-03-10 00:36:21 -06:00
committed by GitHub
parent 411eb51fbc
commit da02b741e1
183 changed files with 1277 additions and 698 deletions
+41
View File
@@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace App\Enums\Auth;
use App\Enums\BaseEnum;
use Illuminate\Support\Str;
/**
* Class CrudPermissions.
*
* @method static static CREATE()
* @method static static DELETE()
* @method static static UPDATE()
* @method static static VIEW()
*/
class CrudPermission extends BaseEnum
{
public const CREATE = 'create';
public const DELETE = 'delete';
public const UPDATE = 'update';
public const VIEW = 'view';
/**
* Format permission name for model.
*
* @param string $modelClass
* @return string
*/
public function format(string $modelClass): string
{
return Str::of($this->value)
->append(class_basename($modelClass))
->snake(' ')
->__toString();
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace App\Enums\Auth;
/**
* Class ExtendedCrudPermission.
*
* @method static static FORCE_DELETE()
* @method static static RESTORE()
*/
final class ExtendedCrudPermission extends CrudPermission
{
public const FORCE_DELETE = 'force delete';
public const RESTORE = 'restore';
}
+23
View File
@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace App\Enums\Auth;
use App\Enums\BaseEnum;
/**
* Class SpecialPermission.
*/
final class SpecialPermission extends BaseEnum
{
public const BYPASS_API_RATE_LIMITER = 'bypass api rate limiter';
public const BYPASS_FEATURE_FLAGS = 'bypass feature flags';
public const VIEW_HORIZON = 'view horizon';
public const VIEW_NOVA = 'view nova';
public const VIEW_TELESCOPE = 'view telescope';
}
+6 -1
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Http\Middleware;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\User;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Config;
@@ -29,7 +31,10 @@ class IsFeatureEnabled
*/
public function handle(Request $request, Closure $next, string $flag, string $message): mixed
{
if (! Config::bool($flag)) {
/** @var User|null $user */
$user = $request->user('sanctum');
if (! Config::bool($flag) && empty($user?->can(SpecialPermission::BYPASS_FEATURE_FLAGS))) {
abort(403, $message);
}
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Admin;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Admin\Announcement;
use App\Models\Auth\User;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class AnnouncementPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view announcement'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Announcement::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class AnnouncementPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view announcement'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Announcement::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class AnnouncementPolicy
*/
public function create(User $user): bool
{
return $user->can('create announcement');
return $user->can(CrudPermission::CREATE()->format(Announcement::class));
}
/**
@@ -64,7 +66,7 @@ class AnnouncementPolicy
*/
public function update(User $user, Announcement $announcement): bool
{
return ! $announcement->trashed() && $user->can('update announcement');
return ! $announcement->trashed() && $user->can(CrudPermission::UPDATE()->format(Announcement::class));
}
/**
@@ -76,7 +78,7 @@ class AnnouncementPolicy
*/
public function delete(User $user, Announcement $announcement): bool
{
return ! $announcement->trashed() && $user->can('delete announcement');
return ! $announcement->trashed() && $user->can(CrudPermission::DELETE()->format(Announcement::class));
}
/**
@@ -88,7 +90,7 @@ class AnnouncementPolicy
*/
public function restore(User $user, Announcement $announcement): bool
{
return $announcement->trashed() && $user->can('restore announcement');
return $announcement->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Announcement::class));
}
/**
@@ -99,6 +101,6 @@ class AnnouncementPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete announcement');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Announcement::class));
}
}
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Admin;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class DumpPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view dump'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Dump::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class DumpPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view dump'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Dump::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class DumpPolicy
*/
public function create(User $user): bool
{
return $user->can('create dump');
return $user->can(CrudPermission::CREATE()->format(Dump::class));
}
/**
@@ -64,7 +66,7 @@ class DumpPolicy
*/
public function update(User $user, Dump $dump): bool
{
return ! $dump->trashed() && $user->can('update dump');
return ! $dump->trashed() && $user->can(CrudPermission::UPDATE()->format(Dump::class));
}
/**
@@ -76,7 +78,7 @@ class DumpPolicy
*/
public function delete(User $user, Dump $dump): bool
{
return ! $dump->trashed() && $user->can('delete dump');
return ! $dump->trashed() && $user->can(CrudPermission::DELETE()->format(Dump::class));
}
/**
@@ -88,7 +90,7 @@ class DumpPolicy
*/
public function restore(User $user, Dump $dump): bool
{
return $dump->trashed() && $user->can('restore dump');
return $dump->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Dump::class));
}
/**
@@ -99,6 +101,6 @@ class DumpPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete dump');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Dump::class));
}
}
+7 -5
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Admin;
use App\Enums\Auth\CrudPermission;
use App\Models\Admin\Setting;
use App\Models\Auth\User;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -22,7 +24,7 @@ class SettingPolicy
*/
public function viewAny(User $user): bool
{
return $user->can('view setting');
return $user->can(CrudPermission::VIEW()->format(Setting::class));
}
/**
@@ -33,7 +35,7 @@ class SettingPolicy
*/
public function view(User $user): bool
{
return $user->can('view setting');
return $user->can(CrudPermission::VIEW()->format(Setting::class));
}
/**
@@ -44,7 +46,7 @@ class SettingPolicy
*/
public function create(User $user): bool
{
return $user->can('create setting');
return $user->can(CrudPermission::CREATE()->format(Setting::class));
}
/**
@@ -55,7 +57,7 @@ class SettingPolicy
*/
public function update(User $user): bool
{
return $user->can('update setting');
return $user->can(CrudPermission::UPDATE()->format(Setting::class));
}
/**
@@ -66,6 +68,6 @@ class SettingPolicy
*/
public function delete(User $user): bool
{
return $user->can('delete setting');
return $user->can(CrudPermission::DELETE()->format(Setting::class));
}
}
+10 -7
View File
@@ -4,6 +4,9 @@ declare(strict_types=1);
namespace App\Policies\Auth;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\Permission;
use App\Models\Auth\User;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -22,7 +25,7 @@ class PermissionPolicy
*/
public function viewAny(User $user): bool
{
return $user->can('view permission');
return $user->can(CrudPermission::VIEW()->format(Permission::class));
}
/**
@@ -33,7 +36,7 @@ class PermissionPolicy
*/
public function view(User $user): bool
{
return $user->can('view permission');
return $user->can(CrudPermission::VIEW()->format(Permission::class));
}
/**
@@ -44,7 +47,7 @@ class PermissionPolicy
*/
public function create(User $user): bool
{
return $user->can('create permission');
return $user->can(CrudPermission::CREATE()->format(Permission::class));
}
/**
@@ -55,7 +58,7 @@ class PermissionPolicy
*/
public function update(User $user): bool
{
return $user->can('update permission');
return $user->can(CrudPermission::UPDATE()->format(Permission::class));
}
/**
@@ -66,7 +69,7 @@ class PermissionPolicy
*/
public function delete(User $user): bool
{
return $user->can('delete permission');
return $user->can(CrudPermission::DELETE()->format(Permission::class));
}
/**
@@ -77,7 +80,7 @@ class PermissionPolicy
*/
public function restore(User $user): bool
{
return $user->can('restore permission');
return $user->can(ExtendedCrudPermission::RESTORE()->format(Permission::class));
}
/**
@@ -88,7 +91,7 @@ class PermissionPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete permission');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Permission::class));
}
/**
+10 -7
View File
@@ -4,6 +4,9 @@ declare(strict_types=1);
namespace App\Policies\Auth;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\Role;
use App\Models\Auth\User;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -22,7 +25,7 @@ class RolePolicy
*/
public function viewAny(User $user): bool
{
return $user->can('view role');
return $user->can(CrudPermission::VIEW()->format(Role::class));
}
/**
@@ -33,7 +36,7 @@ class RolePolicy
*/
public function view(User $user): bool
{
return $user->can('view role');
return $user->can(CrudPermission::VIEW()->format(Role::class));
}
/**
@@ -44,7 +47,7 @@ class RolePolicy
*/
public function create(User $user): bool
{
return $user->can('create role');
return $user->can(CrudPermission::CREATE()->format(Role::class));
}
/**
@@ -55,7 +58,7 @@ class RolePolicy
*/
public function update(User $user): bool
{
return $user->can('update role');
return $user->can(CrudPermission::UPDATE()->format(Role::class));
}
/**
@@ -66,7 +69,7 @@ class RolePolicy
*/
public function delete(User $user): bool
{
return $user->can('delete role');
return $user->can(CrudPermission::DELETE()->format(Role::class));
}
/**
@@ -77,7 +80,7 @@ class RolePolicy
*/
public function restore(User $user): bool
{
return $user->can('restore role');
return $user->can(ExtendedCrudPermission::RESTORE()->format(Role::class));
}
/**
@@ -88,7 +91,7 @@ class RolePolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete role');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Role::class));
}
/**
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Auth;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -22,7 +24,7 @@ class UserPolicy
*/
public function viewAny(User $user): bool
{
return $user->can('view user');
return $user->can(CrudPermission::VIEW()->format(User::class));
}
/**
@@ -33,7 +35,7 @@ class UserPolicy
*/
public function view(User $user): bool
{
return $user->can('view user');
return $user->can(CrudPermission::VIEW()->format(User::class));
}
/**
@@ -44,7 +46,7 @@ class UserPolicy
*/
public function create(User $user): bool
{
return $user->can('create user');
return $user->can(CrudPermission::CREATE()->format(User::class));
}
/**
@@ -55,7 +57,7 @@ class UserPolicy
*/
public function update(User $user): bool
{
return $user->can('update user');
return $user->can(CrudPermission::UPDATE()->format(User::class));
}
/**
@@ -66,7 +68,7 @@ class UserPolicy
*/
public function delete(User $user): bool
{
return $user->can('delete user');
return $user->can(CrudPermission::DELETE()->format(User::class));
}
/**
@@ -77,7 +79,7 @@ class UserPolicy
*/
public function restore(User $user): bool
{
return $user->can('restore user');
return $user->can(ExtendedCrudPermission::RESTORE()->format(User::class));
}
/**
@@ -88,7 +90,7 @@ class UserPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete user');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(User::class));
}
/**
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Billing;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Balance;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class BalancePolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view balance'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Balance::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class BalancePolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view balance'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Balance::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class BalancePolicy
*/
public function create(User $user): bool
{
return $user->can('create balance');
return $user->can(CrudPermission::CREATE()->format(Balance::class));
}
/**
@@ -64,7 +66,7 @@ class BalancePolicy
*/
public function update(User $user, Balance $balance): bool
{
return ! $balance->trashed() && $user->can('update balance');
return ! $balance->trashed() && $user->can(CrudPermission::UPDATE()->format(Balance::class));
}
/**
@@ -76,7 +78,7 @@ class BalancePolicy
*/
public function delete(User $user, Balance $balance): bool
{
return ! $balance->trashed() && $user->can('delete balance');
return ! $balance->trashed() && $user->can(CrudPermission::DELETE()->format(Balance::class));
}
/**
@@ -88,7 +90,7 @@ class BalancePolicy
*/
public function restore(User $user, Balance $balance): bool
{
return $balance->trashed() && $user->can('restore balance');
return $balance->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Balance::class));
}
/**
@@ -99,6 +101,6 @@ class BalancePolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete balance');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Balance::class));
}
}
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Billing;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Transaction;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class TransactionPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view transaction'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Transaction::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class TransactionPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view transaction'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Transaction::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class TransactionPolicy
*/
public function create(User $user): bool
{
return $user->can('create transaction');
return $user->can(CrudPermission::CREATE()->format(Transaction::class));
}
/**
@@ -64,7 +66,7 @@ class TransactionPolicy
*/
public function update(User $user, Transaction $transaction): bool
{
return ! $transaction->trashed() && $user->can('update transaction');
return ! $transaction->trashed() && $user->can(CrudPermission::UPDATE()->format(Transaction::class));
}
/**
@@ -76,7 +78,7 @@ class TransactionPolicy
*/
public function delete(User $user, Transaction $transaction): bool
{
return ! $transaction->trashed() && $user->can('delete transaction');
return ! $transaction->trashed() && $user->can(CrudPermission::DELETE()->format(Transaction::class));
}
/**
@@ -88,7 +90,7 @@ class TransactionPolicy
*/
public function restore(User $user, Transaction $transaction): bool
{
return $transaction->trashed() && $user->can('restore transaction');
return $transaction->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Transaction::class));
}
/**
@@ -99,6 +101,6 @@ class TransactionPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete transaction');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Transaction::class));
}
}
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Document;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Document\Page;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class PagePolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view page'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Page::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class PagePolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view page'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Page::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class PagePolicy
*/
public function create(User $user): bool
{
return $user->can('create page');
return $user->can(CrudPermission::CREATE()->format(Page::class));
}
/**
@@ -64,7 +66,7 @@ class PagePolicy
*/
public function update(User $user, Page $page): bool
{
return ! $page->trashed() && $user->can('update page');
return ! $page->trashed() && $user->can(CrudPermission::UPDATE()->format(Page::class));
}
/**
@@ -76,7 +78,7 @@ class PagePolicy
*/
public function delete(User $user, Page $page): bool
{
return ! $page->trashed() && $user->can('delete page');
return ! $page->trashed() && $user->can(CrudPermission::DELETE()->format(Page::class));
}
/**
@@ -88,7 +90,7 @@ class PagePolicy
*/
public function restore(User $user, Page $page): bool
{
return $page->trashed() && $user->can('restore page');
return $page->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Page::class));
}
/**
@@ -99,6 +101,6 @@ class PagePolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete page');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Page::class));
}
}
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\List\Playlist;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -34,7 +36,7 @@ class PlaylistTrackPolicy
$playlist = $request->route('playlist');
return $user !== null
? ($user->getKey() === $playlist?->user_id || PlaylistVisibility::PRIVATE()->isNot($playlist?->visibility)) && $user->can('view playlist track')
? ($user->getKey() === $playlist?->user_id || PlaylistVisibility::PRIVATE()->isNot($playlist?->visibility)) && $user->can(CrudPermission::VIEW()->format(PlaylistTrack::class))
: PlaylistVisibility::PRIVATE()->isNot($playlist?->visibility);
}
);
@@ -58,7 +60,7 @@ class PlaylistTrackPolicy
$playlist = $request->route('playlist');
return $user !== null
? ($user->getKey() === $playlist?->user_id || PlaylistVisibility::PRIVATE()->isNot($playlist?->visibility)) && $user->can('view playlist track')
? ($user->getKey() === $playlist?->user_id || PlaylistVisibility::PRIVATE()->isNot($playlist?->visibility)) && $user->can(CrudPermission::VIEW()->format(PlaylistTrack::class))
: PlaylistVisibility::PRIVATE()->isNot($playlist?->visibility);
}
);
@@ -100,7 +102,7 @@ class PlaylistTrackPolicy
/** @var Playlist|null $playlist */
$playlist = $request->route('playlist');
return ! $track->trashed() && $user->getKey() === $playlist?->user_id && $user->can('update playlist track');
return ! $track->trashed() && $user->getKey() === $playlist?->user_id && $user->can(CrudPermission::UPDATE()->format(PlaylistTrack::class));
}
);
}
@@ -122,7 +124,7 @@ class PlaylistTrackPolicy
/** @var Playlist|null $playlist */
$playlist = $request->route('playlist');
return ! $track->trashed() && $user->getKey() === $playlist?->user_id && $user->can('delete playlist track');
return ! $track->trashed() && $user->getKey() === $playlist?->user_id && $user->can(CrudPermission::DELETE()->format(PlaylistTrack::class));
}
);
}
@@ -144,7 +146,7 @@ class PlaylistTrackPolicy
/** @var Playlist|null $playlist */
$playlist = $request->route('playlist');
return $track->trashed() && $user->getKey() === $playlist?->user_id && $user->can('restore playlist track');
return $track->trashed() && $user->getKey() === $playlist?->user_id && $user->can(ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class));
}
);
}
@@ -157,6 +159,6 @@ class PlaylistTrackPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete playlist track');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(PlaylistTrack::class));
}
}
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\List;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -29,7 +31,7 @@ class PlaylistPolicy
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->hasRole('Admin'),
fn (): bool => $user === null || $user->can('view playlist')
fn (): bool => $user === null || $user->can(CrudPermission::VIEW()->format(Playlist::class))
);
}
@@ -45,7 +47,7 @@ class PlaylistPolicy
return Nova::whenServing(
fn (): bool => $user !== null && $user->hasRole('Admin'),
fn (): bool => $user !== null
? ($user->getKey() === $playlist->user_id || PlaylistVisibility::PRIVATE()->isNot($playlist->visibility)) && $user->can('view playlist')
? ($user->getKey() === $playlist->user_id || PlaylistVisibility::PRIVATE()->isNot($playlist->visibility)) && $user->can(CrudPermission::VIEW()->format(Playlist::class))
: PlaylistVisibility::PRIVATE()->isNot($playlist->visibility)
);
}
@@ -60,7 +62,7 @@ class PlaylistPolicy
{
return Nova::whenServing(
fn (): bool => $user->hasRole('Admin'),
fn (): bool => $user->can('create playlist')
fn (): bool => $user->can(CrudPermission::CREATE()->format(Playlist::class))
);
}
@@ -75,7 +77,7 @@ class PlaylistPolicy
{
return Nova::whenServing(
fn (): bool => $user->hasRole('Admin'),
fn (): bool => ! $playlist->trashed() && $user->getKey() === $playlist->user_id && $user->can('update playlist')
fn (): bool => ! $playlist->trashed() && $user->getKey() === $playlist->user_id && $user->can(CrudPermission::UPDATE()->format(Playlist::class))
);
}
@@ -90,7 +92,7 @@ class PlaylistPolicy
{
return Nova::whenServing(
fn (): bool => $user->hasRole('Admin'),
fn (): bool => ! $playlist->trashed() && $user->getKey() === $playlist->user_id && $user->can('delete playlist')
fn (): bool => ! $playlist->trashed() && $user->getKey() === $playlist->user_id && $user->can(CrudPermission::DELETE()->format(Playlist::class))
);
}
@@ -105,7 +107,7 @@ class PlaylistPolicy
{
return Nova::whenServing(
fn (): bool => $user->hasRole('Admin'),
fn (): bool => $playlist->trashed() && $user->getKey() === $playlist->user_id && $user->can('restore playlist')
fn (): bool => $playlist->trashed() && $user->getKey() === $playlist->user_id && $user->can(ExtendedCrudPermission::RESTORE()->format(Playlist::class))
);
}
@@ -117,7 +119,7 @@ class PlaylistPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete playlist');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Playlist::class));
}
/**
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki\Anime;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime\AnimeSynonym;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class AnimeSynonymPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime synonym'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(AnimeSynonym::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class AnimeSynonymPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime synonym'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(AnimeSynonym::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class AnimeSynonymPolicy
*/
public function create(User $user): bool
{
return $user->can('create anime synonym');
return $user->can(CrudPermission::CREATE()->format(AnimeSynonym::class));
}
/**
@@ -64,7 +66,7 @@ class AnimeSynonymPolicy
*/
public function update(User $user, AnimeSynonym $animesynonym): bool
{
return ! $animesynonym->trashed() && $user->can('update anime synonym');
return ! $animesynonym->trashed() && $user->can(CrudPermission::UPDATE()->format(AnimeSynonym::class));
}
/**
@@ -76,7 +78,7 @@ class AnimeSynonymPolicy
*/
public function delete(User $user, AnimeSynonym $animesynonym): bool
{
return ! $animesynonym->trashed() && $user->can('delete anime synonym');
return ! $animesynonym->trashed() && $user->can(CrudPermission::DELETE()->format(AnimeSynonym::class));
}
/**
@@ -88,7 +90,7 @@ class AnimeSynonymPolicy
*/
public function restore(User $user, AnimeSynonym $animesynonym): bool
{
return $animesynonym->trashed() && $user->can('restore anime synonym');
return $animesynonym->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(AnimeSynonym::class));
}
/**
@@ -99,6 +101,6 @@ class AnimeSynonymPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete anime synonym');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(AnimeSynonym::class));
}
}
+9 -7
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki\Anime;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime\AnimeTheme;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class AnimeThemePolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime theme'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(AnimeTheme::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class AnimeThemePolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime theme'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(AnimeTheme::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class AnimeThemePolicy
*/
public function create(User $user): bool
{
return $user->can('create anime theme');
return $user->can(CrudPermission::CREATE()->format(AnimeTheme::class));
}
/**
@@ -64,7 +66,7 @@ class AnimeThemePolicy
*/
public function update(User $user, AnimeTheme $animetheme): bool
{
return ! $animetheme->trashed() && $user->can('update anime theme');
return ! $animetheme->trashed() && $user->can(CrudPermission::UPDATE()->format(AnimeTheme::class));
}
/**
@@ -76,7 +78,7 @@ class AnimeThemePolicy
*/
public function delete(User $user, AnimeTheme $animetheme): bool
{
return ! $animetheme->trashed() && $user->can('delete anime theme');
return ! $animetheme->trashed() && $user->can(CrudPermission::DELETE()->format(AnimeTheme::class));
}
/**
@@ -88,7 +90,7 @@ class AnimeThemePolicy
*/
public function restore(User $user, AnimeTheme $animetheme): bool
{
return $animetheme->trashed() && $user->can('restore anime theme');
return $animetheme->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(AnimeTheme::class));
}
/**
@@ -99,6 +101,6 @@ class AnimeThemePolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete anime theme');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(AnimeTheme::class));
}
}
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki\Anime\Theme;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Video;
@@ -27,7 +29,7 @@ class AnimeThemeEntryPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime theme entry'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(AnimeThemeEntry::class)),
fn (): bool => true
);
}
@@ -41,7 +43,7 @@ class AnimeThemeEntryPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime theme entry'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(AnimeThemeEntry::class)),
fn (): bool => true
);
}
@@ -54,7 +56,7 @@ class AnimeThemeEntryPolicy
*/
public function create(User $user): bool
{
return $user->can('create anime theme entry');
return $user->can(CrudPermission::CREATE()->format(AnimeThemeEntry::class));
}
/**
@@ -66,7 +68,7 @@ class AnimeThemeEntryPolicy
*/
public function update(User $user, AnimeThemeEntry $animethemeentry): bool
{
return ! $animethemeentry->trashed() && $user->can('update anime theme entry');
return ! $animethemeentry->trashed() && $user->can(CrudPermission::UPDATE()->format(AnimeThemeEntry::class));
}
/**
@@ -78,7 +80,7 @@ class AnimeThemeEntryPolicy
*/
public function delete(User $user, AnimeThemeEntry $animethemeentry): bool
{
return ! $animethemeentry->trashed() && $user->can('delete anime theme entry');
return ! $animethemeentry->trashed() && $user->can(CrudPermission::DELETE()->format(AnimeThemeEntry::class));
}
/**
@@ -90,7 +92,7 @@ class AnimeThemeEntryPolicy
*/
public function restore(User $user, AnimeThemeEntry $animethemeentry): bool
{
return $animethemeentry->trashed() && $user->can('restore anime theme entry');
return $animethemeentry->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(AnimeThemeEntry::class));
}
/**
@@ -101,7 +103,7 @@ class AnimeThemeEntryPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete anime theme entry');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(AnimeThemeEntry::class));
}
/**
@@ -112,7 +114,7 @@ class AnimeThemeEntryPolicy
*/
public function attachAnyVideo(User $user): bool
{
return $user->can('update anime theme entry');
return $user->can(CrudPermission::UPDATE()->format(AnimeThemeEntry::class));
}
/**
@@ -130,7 +132,7 @@ class AnimeThemeEntryPolicy
->where($video->getKeyName(), $video->getKey())
->exists();
return ! $attached && $user->can('update anime theme entry');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(AnimeThemeEntry::class));
}
/**
@@ -141,6 +143,6 @@ class AnimeThemeEntryPolicy
*/
public function detachVideo(User $user): bool
{
return $user->can('update anime theme entry');
return $user->can(CrudPermission::UPDATE()->format(AnimeThemeEntry::class));
}
}
+21 -19
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Image;
@@ -31,7 +33,7 @@ class AnimePolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Anime::class)),
fn (): bool => true
);
}
@@ -45,7 +47,7 @@ class AnimePolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view anime'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Anime::class)),
fn (): bool => true
);
}
@@ -58,7 +60,7 @@ class AnimePolicy
*/
public function create(User $user): bool
{
return $user->can('create anime');
return $user->can(CrudPermission::CREATE()->format(Anime::class));
}
/**
@@ -70,7 +72,7 @@ class AnimePolicy
*/
public function update(User $user, Anime $anime): bool
{
return ! $anime->trashed() && $user->can('update anime');
return ! $anime->trashed() && $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -82,7 +84,7 @@ class AnimePolicy
*/
public function delete(User $user, Anime $anime): bool
{
return ! $anime->trashed() && $user->can('delete anime');
return ! $anime->trashed() && $user->can(CrudPermission::DELETE()->format(Anime::class));
}
/**
@@ -94,7 +96,7 @@ class AnimePolicy
*/
public function restore(User $user, Anime $anime): bool
{
return $anime->trashed() && $user->can('restore anime');
return $anime->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Anime::class));
}
/**
@@ -105,7 +107,7 @@ class AnimePolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete anime');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Anime::class));
}
/**
@@ -116,7 +118,7 @@ class AnimePolicy
*/
public function attachAnySeries(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -134,7 +136,7 @@ class AnimePolicy
->where($series->getKeyName(), $series->getKey())
->exists();
return ! $attached && $user->can('update anime');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -145,7 +147,7 @@ class AnimePolicy
*/
public function detachSeries(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -156,7 +158,7 @@ class AnimePolicy
*/
public function attachAnyExternalResource(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -167,7 +169,7 @@ class AnimePolicy
*/
public function attachExternalResource(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -178,7 +180,7 @@ class AnimePolicy
*/
public function detachExternalResource(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -189,7 +191,7 @@ class AnimePolicy
*/
public function attachAnyImage(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -207,7 +209,7 @@ class AnimePolicy
->where($image->getKeyName(), $image->getKey())
->exists();
return ! $attached && $user->can('update anime');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -218,7 +220,7 @@ class AnimePolicy
*/
public function detachImage(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -229,7 +231,7 @@ class AnimePolicy
*/
public function attachAnyStudio(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -247,7 +249,7 @@ class AnimePolicy
->where($studio->getKeyName(), $studio->getKey())
->exists();
return ! $attached && $user->can('update anime');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
/**
@@ -258,6 +260,6 @@ class AnimePolicy
*/
public function detachStudio(User $user): bool
{
return $user->can('update anime');
return $user->can(CrudPermission::UPDATE()->format(Anime::class));
}
}
+21 -19
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Image;
@@ -27,7 +29,7 @@ class ArtistPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view artist'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Artist::class)),
fn (): bool => true
);
}
@@ -41,7 +43,7 @@ class ArtistPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view artist'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Artist::class)),
fn (): bool => true
);
}
@@ -54,7 +56,7 @@ class ArtistPolicy
*/
public function create(User $user): bool
{
return $user->can('create artist');
return $user->can(CrudPermission::CREATE()->format(Artist::class));
}
/**
@@ -66,7 +68,7 @@ class ArtistPolicy
*/
public function update(User $user, Artist $artist): bool
{
return ! $artist->trashed() && $user->can('update artist');
return ! $artist->trashed() && $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -78,7 +80,7 @@ class ArtistPolicy
*/
public function delete(User $user, Artist $artist): bool
{
return ! $artist->trashed() && $user->can('delete artist');
return ! $artist->trashed() && $user->can(CrudPermission::DELETE()->format(Artist::class));
}
/**
@@ -90,7 +92,7 @@ class ArtistPolicy
*/
public function restore(User $user, Artist $artist): bool
{
return $artist->trashed() && $user->can('restore artist');
return $artist->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Artist::class));
}
/**
@@ -101,7 +103,7 @@ class ArtistPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete artist');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Artist::class));
}
/**
@@ -112,7 +114,7 @@ class ArtistPolicy
*/
public function attachAnyExternalResource(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -123,7 +125,7 @@ class ArtistPolicy
*/
public function attachExternalResource(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -134,7 +136,7 @@ class ArtistPolicy
*/
public function detachExternalResource(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -145,7 +147,7 @@ class ArtistPolicy
*/
public function attachAnySong(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -156,7 +158,7 @@ class ArtistPolicy
*/
public function attachSong(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -167,7 +169,7 @@ class ArtistPolicy
*/
public function detachSong(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -178,7 +180,7 @@ class ArtistPolicy
*/
public function attachAnyArtist(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -189,7 +191,7 @@ class ArtistPolicy
*/
public function attachArtist(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -200,7 +202,7 @@ class ArtistPolicy
*/
public function detachArtist(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -211,7 +213,7 @@ class ArtistPolicy
*/
public function attachAnyImage(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -229,7 +231,7 @@ class ArtistPolicy
->where($image->getKeyName(), $image->getKey())
->exists();
return ! $attached && $user->can('update artist');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
/**
@@ -240,6 +242,6 @@ class ArtistPolicy
*/
public function detachImage(User $user): bool
{
return $user->can('update artist');
return $user->can(CrudPermission::UPDATE()->format(Artist::class));
}
}
+10 -8
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Audio;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class AudioPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view audio'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Audio::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class AudioPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view audio'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Audio::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class AudioPolicy
*/
public function create(User $user): bool
{
return $user->can('create audio');
return $user->can(CrudPermission::CREATE()->format(Audio::class));
}
/**
@@ -64,7 +66,7 @@ class AudioPolicy
*/
public function update(User $user, Audio $audio): bool
{
return ! $audio->trashed() && $user->can('update audio');
return ! $audio->trashed() && $user->can(CrudPermission::UPDATE()->format(Audio::class));
}
/**
@@ -76,7 +78,7 @@ class AudioPolicy
*/
public function delete(User $user, Audio $audio): bool
{
return ! $audio->trashed() && $user->can('delete audio');
return ! $audio->trashed() && $user->can(CrudPermission::DELETE()->format(Audio::class));
}
/**
@@ -88,7 +90,7 @@ class AudioPolicy
*/
public function restore(User $user, Audio $audio): bool
{
return $audio->trashed() && $user->can('restore audio');
return $audio->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Audio::class));
}
/**
@@ -99,7 +101,7 @@ class AudioPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete audio');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Audio::class));
}
/**
@@ -110,6 +112,6 @@ class AudioPolicy
*/
public function addVideo(User $user): bool
{
return $user->can('create video');
return $user->can(CrudPermission::CREATE()->format(Audio::class));
}
}
+18 -16
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\ExternalResource;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class ExternalResourcePolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view external resource'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(ExternalResource::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class ExternalResourcePolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view external resource'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(ExternalResource::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class ExternalResourcePolicy
*/
public function create(User $user): bool
{
return $user->can('create external resource');
return $user->can(CrudPermission::CREATE()->format(ExternalResource::class));
}
/**
@@ -64,7 +66,7 @@ class ExternalResourcePolicy
*/
public function update(User $user, ExternalResource $resource): bool
{
return ! $resource->trashed() && $user->can('update external resource');
return ! $resource->trashed() && $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -76,7 +78,7 @@ class ExternalResourcePolicy
*/
public function delete(User $user, ExternalResource $resource): bool
{
return ! $resource->trashed() && $user->can('delete external resource');
return ! $resource->trashed() && $user->can(CrudPermission::DELETE()->format(ExternalResource::class));
}
/**
@@ -88,7 +90,7 @@ class ExternalResourcePolicy
*/
public function restore(User $user, ExternalResource $resource): bool
{
return $resource->trashed() && $user->can('restore external resource');
return $resource->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(ExternalResource::class));
}
/**
@@ -99,7 +101,7 @@ class ExternalResourcePolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete external resource');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(ExternalResource::class));
}
/**
@@ -110,7 +112,7 @@ class ExternalResourcePolicy
*/
public function attachAnyArtist(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -121,7 +123,7 @@ class ExternalResourcePolicy
*/
public function attachArtist(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -132,7 +134,7 @@ class ExternalResourcePolicy
*/
public function detachArtist(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -143,7 +145,7 @@ class ExternalResourcePolicy
*/
public function attachAnyAnime(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -154,7 +156,7 @@ class ExternalResourcePolicy
*/
public function attachAnime(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -165,7 +167,7 @@ class ExternalResourcePolicy
*/
public function detachAnime(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -176,7 +178,7 @@ class ExternalResourcePolicy
*/
public function attachAnyStudio(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -187,7 +189,7 @@ class ExternalResourcePolicy
*/
public function attachStudio(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
/**
@@ -198,6 +200,6 @@ class ExternalResourcePolicy
*/
public function detachStudio(User $user): bool
{
return $user->can('update external resource');
return $user->can(CrudPermission::UPDATE()->format(ExternalResource::class));
}
}
+18 -16
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use App\Models\Wiki\Anime;
@@ -33,7 +35,7 @@ class ImagePolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view image'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Image::class)),
fn (): bool => true
);
}
@@ -47,7 +49,7 @@ class ImagePolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view image'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Image::class)),
fn (): bool => true
);
}
@@ -60,7 +62,7 @@ class ImagePolicy
*/
public function create(User $user): bool
{
return $user->can('create image');
return $user->can(CrudPermission::CREATE()->format(Image::class));
}
/**
@@ -72,7 +74,7 @@ class ImagePolicy
*/
public function update(User $user, Image $image): bool
{
return ! $image->trashed() && $user->can('update image');
return ! $image->trashed() && $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -84,7 +86,7 @@ class ImagePolicy
*/
public function delete(User $user, Image $image): bool
{
return ! $image->trashed() && $user->can('delete image');
return ! $image->trashed() && $user->can(CrudPermission::DELETE()->format(Image::class));
}
/**
@@ -96,7 +98,7 @@ class ImagePolicy
*/
public function restore(User $user, Image $image): bool
{
return $image->trashed() && $user->can('restore image');
return $image->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Image::class));
}
/**
@@ -107,7 +109,7 @@ class ImagePolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete image');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Image::class));
}
/**
@@ -118,7 +120,7 @@ class ImagePolicy
*/
public function attachAnyArtist(User $user): bool
{
return $user->can('update image');
return $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -136,7 +138,7 @@ class ImagePolicy
->where($image->getKeyName(), $image->getKey())
->exists();
return ! $attached && $user->can('update image');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -147,7 +149,7 @@ class ImagePolicy
*/
public function detachArtist(User $user): bool
{
return $user->can('update image');
return $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -158,7 +160,7 @@ class ImagePolicy
*/
public function attachAnyAnime(User $user): bool
{
return $user->can('update image');
return $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -176,7 +178,7 @@ class ImagePolicy
->where($image->getKeyName(), $image->getKey())
->exists();
return ! $attached && $user->can('update image');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -187,7 +189,7 @@ class ImagePolicy
*/
public function detachAnime(User $user): bool
{
return $user->can('update image');
return $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -198,7 +200,7 @@ class ImagePolicy
*/
public function attachAnyStudio(User $user): bool
{
return $user->can('update image');
return $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -216,7 +218,7 @@ class ImagePolicy
->where($studio->getKeyName(), $studio->getKey())
->exists();
return ! $attached && $user->can('update image');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
@@ -227,7 +229,7 @@ class ImagePolicy
*/
public function detachStudio(User $user): bool
{
return $user->can('update image');
return $user->can(CrudPermission::UPDATE()->format(Image::class));
}
/**
+12 -10
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Series;
@@ -27,7 +29,7 @@ class SeriesPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view series'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Series::class)),
fn (): bool => true
);
}
@@ -41,7 +43,7 @@ class SeriesPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view series'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Series::class)),
fn (): bool => true
);
}
@@ -54,7 +56,7 @@ class SeriesPolicy
*/
public function create(User $user): bool
{
return $user->can('create series');
return $user->can(CrudPermission::CREATE()->format(Series::class));
}
/**
@@ -66,7 +68,7 @@ class SeriesPolicy
*/
public function update(User $user, Series $series): bool
{
return ! $series->trashed() && $user->can('update series');
return ! $series->trashed() && $user->can(CrudPermission::UPDATE()->format(Series::class));
}
/**
@@ -78,7 +80,7 @@ class SeriesPolicy
*/
public function delete(User $user, Series $series): bool
{
return ! $series->trashed() && $user->can('delete series');
return ! $series->trashed() && $user->can(CrudPermission::DELETE()->format(Series::class));
}
/**
@@ -90,7 +92,7 @@ class SeriesPolicy
*/
public function restore(User $user, Series $series): bool
{
return $series->trashed() && $user->can('restore series');
return $series->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Series::class));
}
/**
@@ -101,7 +103,7 @@ class SeriesPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete series');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Series::class));
}
/**
@@ -112,7 +114,7 @@ class SeriesPolicy
*/
public function attachAnyAnime(User $user): bool
{
return $user->can('update series');
return $user->can(CrudPermission::UPDATE()->format(Series::class));
}
/**
@@ -130,7 +132,7 @@ class SeriesPolicy
->where($series->getKeyName(), $series->getKey())
->exists();
return ! $attached && $user->can('update series');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Series::class));
}
/**
@@ -141,6 +143,6 @@ class SeriesPolicy
*/
public function detachAnime(User $user): bool
{
return $user->can('update series');
return $user->can(CrudPermission::UPDATE()->format(Series::class));
}
}
+13 -11
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Song;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class SongPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view song'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Song::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class SongPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view song'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Song::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class SongPolicy
*/
public function create(User $user): bool
{
return $user->can('create song');
return $user->can(CrudPermission::CREATE()->format(Song::class));
}
/**
@@ -64,7 +66,7 @@ class SongPolicy
*/
public function update(User $user, Song $song): bool
{
return ! $song->trashed() && $user->can('update song');
return ! $song->trashed() && $user->can(CrudPermission::UPDATE()->format(Song::class));
}
/**
@@ -76,7 +78,7 @@ class SongPolicy
*/
public function delete(User $user, Song $song): bool
{
return ! $song->trashed() && $user->can('delete song');
return ! $song->trashed() && $user->can(CrudPermission::DELETE()->format(Song::class));
}
/**
@@ -88,7 +90,7 @@ class SongPolicy
*/
public function restore(User $user, Song $song): bool
{
return $song->trashed() && $user->can('restore song');
return $song->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Song::class));
}
/**
@@ -99,7 +101,7 @@ class SongPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete song');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Song::class));
}
/**
@@ -110,7 +112,7 @@ class SongPolicy
*/
public function addAnimeTheme(User $user): bool
{
return $user->can('update song');
return $user->can(CrudPermission::UPDATE()->format(Song::class));
}
/**
@@ -121,7 +123,7 @@ class SongPolicy
*/
public function attachAnyArtist(User $user): bool
{
return $user->can('update song');
return $user->can(CrudPermission::UPDATE()->format(Song::class));
}
/**
@@ -132,7 +134,7 @@ class SongPolicy
*/
public function attachArtist(User $user): bool
{
return $user->can('update song');
return $user->can(CrudPermission::UPDATE()->format(Song::class));
}
/**
@@ -143,6 +145,6 @@ class SongPolicy
*/
public function detachArtist(User $user): bool
{
return $user->can('update song');
return $user->can(CrudPermission::UPDATE()->format(Song::class));
}
}
+18 -16
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Image;
@@ -29,7 +31,7 @@ class StudioPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view studio'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Studio::class)),
fn (): bool => true
);
}
@@ -43,7 +45,7 @@ class StudioPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view studio'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Studio::class)),
fn (): bool => true
);
}
@@ -56,7 +58,7 @@ class StudioPolicy
*/
public function create(User $user): bool
{
return $user->can('create studio');
return $user->can(CrudPermission::CREATE()->format(Studio::class));
}
/**
@@ -68,7 +70,7 @@ class StudioPolicy
*/
public function update(User $user, Studio $studio): bool
{
return ! $studio->trashed() && $user->can('update studio');
return ! $studio->trashed() && $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -80,7 +82,7 @@ class StudioPolicy
*/
public function delete(User $user, Studio $studio): bool
{
return ! $studio->trashed() && $user->can('delete studio');
return ! $studio->trashed() && $user->can(CrudPermission::DELETE()->format(Studio::class));
}
/**
@@ -92,7 +94,7 @@ class StudioPolicy
*/
public function restore(User $user, Studio $studio): bool
{
return $studio->trashed() && $user->can('restore studio');
return $studio->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Studio::class));
}
/**
@@ -103,7 +105,7 @@ class StudioPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete studio');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Studio::class));
}
/**
@@ -114,7 +116,7 @@ class StudioPolicy
*/
public function attachAnyAnime(User $user): bool
{
return $user->can('update studio');
return $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -132,7 +134,7 @@ class StudioPolicy
->where($studio->getKeyName(), $studio->getKey())
->exists();
return ! $attached && $user->can('update studio');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -143,7 +145,7 @@ class StudioPolicy
*/
public function detachAnime(User $user): bool
{
return $user->can('update studio');
return $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -154,7 +156,7 @@ class StudioPolicy
*/
public function attachAnyExternalResource(User $user): bool
{
return $user->can('update studio');
return $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -165,7 +167,7 @@ class StudioPolicy
*/
public function attachExternalResource(User $user): bool
{
return $user->can('update studio');
return $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -176,7 +178,7 @@ class StudioPolicy
*/
public function detachExternalResource(User $user): bool
{
return $user->can('update studio');
return $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -187,7 +189,7 @@ class StudioPolicy
*/
public function attachAnyImage(User $user): bool
{
return $user->can('update studio');
return $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -205,7 +207,7 @@ class StudioPolicy
->where($image->getKeyName(), $image->getKey())
->exists();
return ! $attached && $user->can('update studio');
return ! $attached && $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
/**
@@ -216,6 +218,6 @@ class StudioPolicy
*/
public function detachImage(User $user): bool
{
return $user->can('update studio');
return $user->can(CrudPermission::UPDATE()->format(Studio::class));
}
}
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki\Video;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Video\VideoScript;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class VideoScriptPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view video script'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(VideoScript::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class VideoScriptPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view video script'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(VideoScript::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class VideoScriptPolicy
*/
public function create(User $user): bool
{
return $user->can('create video script');
return $user->can(CrudPermission::CREATE()->format(VideoScript::class));
}
/**
@@ -64,7 +66,7 @@ class VideoScriptPolicy
*/
public function update(User $user, VideoScript $videoscript): bool
{
return ! $videoscript->trashed() && $user->can('update video script');
return ! $videoscript->trashed() && $user->can(CrudPermission::UPDATE()->format(VideoScript::class));
}
/**
@@ -76,7 +78,7 @@ class VideoScriptPolicy
*/
public function delete(User $user, VideoScript $videoscript): bool
{
return ! $videoscript->trashed() && $user->can('delete video script');
return ! $videoscript->trashed() && $user->can(CrudPermission::DELETE()->format(VideoScript::class));
}
/**
@@ -88,7 +90,7 @@ class VideoScriptPolicy
*/
public function restore(User $user, VideoScript $videoscript): bool
{
return $videoscript->trashed() && $user->can('restore video script');
return $videoscript->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(VideoScript::class));
}
/**
@@ -99,6 +101,6 @@ class VideoScriptPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete video script');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(VideoScript::class));
}
}
+12 -10
View File
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace App\Policies\Wiki;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Video;
use Illuminate\Auth\Access\HandlesAuthorization;
@@ -25,7 +27,7 @@ class VideoPolicy
public function viewAny(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view video'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Video::class)),
fn (): bool => true
);
}
@@ -39,7 +41,7 @@ class VideoPolicy
public function view(?User $user): bool
{
return Nova::whenServing(
fn (): bool => $user !== null && $user->can('view video'),
fn (): bool => $user !== null && $user->can(CrudPermission::VIEW()->format(Video::class)),
fn (): bool => true
);
}
@@ -52,7 +54,7 @@ class VideoPolicy
*/
public function create(User $user): bool
{
return $user->can('create video');
return $user->can(CrudPermission::CREATE()->format(Video::class));
}
/**
@@ -64,7 +66,7 @@ class VideoPolicy
*/
public function update(User $user, Video $video): bool
{
return ! $video->trashed() && $user->can('update video');
return ! $video->trashed() && $user->can(CrudPermission::UPDATE()->format(Video::class));
}
/**
@@ -76,7 +78,7 @@ class VideoPolicy
*/
public function delete(User $user, Video $video): bool
{
return ! $video->trashed() && $user->can('delete video');
return ! $video->trashed() && $user->can(CrudPermission::DELETE()->format(Video::class));
}
/**
@@ -88,7 +90,7 @@ class VideoPolicy
*/
public function restore(User $user, Video $video): bool
{
return $video->trashed() && $user->can('restore video');
return $video->trashed() && $user->can(ExtendedCrudPermission::RESTORE()->format(Video::class));
}
/**
@@ -99,7 +101,7 @@ class VideoPolicy
*/
public function forceDelete(User $user): bool
{
return $user->can('force delete video');
return $user->can(ExtendedCrudPermission::FORCE_DELETE()->format(Video::class));
}
/**
@@ -110,7 +112,7 @@ class VideoPolicy
*/
public function attachAnyAnimeThemeEntry(User $user): bool
{
return $user->can('update video');
return $user->can(CrudPermission::UPDATE()->format(Video::class));
}
/**
@@ -121,7 +123,7 @@ class VideoPolicy
*/
public function attachAnimeThemeEntry(User $user): bool
{
return $user->can('update video');
return $user->can(CrudPermission::UPDATE()->format(Video::class));
}
/**
@@ -132,7 +134,7 @@ class VideoPolicy
*/
public function detachAnimeThemeEntry(User $user): bool
{
return $user->can('update video');
return $user->can(CrudPermission::UPDATE()->format(Video::class));
}
/**
-3
View File
@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace App\Providers;
use App\Models\Auth\User;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Config;
@@ -44,7 +43,5 @@ class AuthServiceProvider extends ServiceProvider
->append('Policy')
->__toString()
);
Gate::define('viewNova', fn (User $user) => $user->can('view nova'));
}
}
+2 -1
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Providers;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\User;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Gate;
@@ -40,6 +41,6 @@ class HorizonServiceProvider extends HorizonApplicationServiceProvider
*/
protected function gate(): void
{
Gate::define('viewHorizon', fn (User $user) => $user->can('view horizon'));
Gate::define('viewHorizon', fn (User $user) => $user->can(SpecialPermission::VIEW_HORIZON));
}
}
+2 -1
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Providers;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\User;
use App\Nova\Dashboards\Main;
use Illuminate\Http\Request;
@@ -78,7 +79,7 @@ class NovaServiceProvider extends NovaApplicationServiceProvider
*/
protected function gate(): void
{
Gate::define('viewNova', fn (User $user) => $user->can('view nova'));
Gate::define('viewNova', fn (User $user) => $user->can(SpecialPermission::VIEW_NOVA));
}
/**
+2 -1
View File
@@ -7,6 +7,7 @@ namespace App\Providers;
use App\Constants\Config\AudioConstants;
use App\Constants\Config\DumpConstants;
use App\Constants\Config\VideoConstants;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\User;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
@@ -76,7 +77,7 @@ class RouteServiceProvider extends ServiceProvider
RateLimiter::for('api', function (Request $request) {
// Allow the client to bypass API rate limiting
$user = $request->user('sanctum');
if ($user instanceof User && $user->can('bypass api rate limiter')) {
if ($user instanceof User && $user->can(SpecialPermission::BYPASS_API_RATE_LIMITER)) {
return Limit::none();
}
+2 -1
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Providers;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\User;
use Illuminate\Support\Facades\Gate;
use Laravel\Telescope\IncomingEntry;
@@ -72,6 +73,6 @@ class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
*/
protected function gate(): void
{
Gate::define('viewTelescope', fn (User $user) => $user->can('view telescope'));
Gate::define('viewTelescope', fn (User $user) => $user->can(SpecialPermission::VIEW_TELESCOPE));
}
}
@@ -4,7 +4,33 @@ declare(strict_types=1);
namespace Database\Seeders\Auth\Permission;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Auth\SpecialPermission;
use App\Models\Admin\Announcement;
use App\Models\Admin\Dump;
use App\Models\Admin\Setting;
use App\Models\Auth\Permission;
use App\Models\Auth\Role;
use App\Models\Auth\User;
use App\Models\Billing\Balance;
use App\Models\Billing\Transaction;
use App\Models\Document\Page;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Audio;
use App\Models\Wiki\ExternalResource;
use App\Models\Wiki\Image;
use App\Models\Wiki\Series;
use App\Models\Wiki\Song;
use App\Models\Wiki\Studio;
use App\Models\Wiki\Video;
use App\Models\Wiki\Video\VideoScript;
use Illuminate\Database\Seeder;
/**
@@ -19,90 +45,55 @@ class PermissionSeeder extends Seeder
*/
public function run(): void
{
$this->registerResource('announcement', $this->extendedCrudAbilities());
$this->registerResource('dump', $this->extendedCrudAbilities());
$this->registerResource('setting', $this->crudAbilities());
// Admin Resources
$this->registerResource(Announcement::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Dump::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Setting::class, CrudPermission::getInstances());
// Auth Resources
$this->registerResource('permission', ['view']);
$this->registerResource('role', $this->crudAbilities());
$this->registerResource('user', $this->extendedCrudAbilities());
$this->registerResource(Permission::class, [CrudPermission::VIEW()]);
$this->registerResource(Role::class, CrudPermission::getInstances());
$this->registerResource(User::class, ExtendedCrudPermission::getInstances());
// Billing Resources
$this->registerResource('balance', $this->extendedCrudAbilities());
$this->registerResource('transaction', $this->extendedCrudAbilities());
$this->registerResource(Balance::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Transaction::class, ExtendedCrudPermission::getInstances());
// List Resources
$this->registerResource('playlist', $this->extendedCrudAbilities());
$this->registerResource('playlist track', $this->extendedCrudAbilities());
$this->registerResource(Playlist::class, ExtendedCrudPermission::getInstances());
$this->registerResource(PlaylistTrack::class, ExtendedCrudPermission::getInstances());
// Wiki Resources
$this->registerResource('anime', $this->extendedCrudAbilities());
$this->registerResource('anime synonym', $this->extendedCrudAbilities());
$this->registerResource('anime theme', $this->extendedCrudAbilities());
$this->registerResource('anime theme entry', $this->extendedCrudAbilities());
$this->registerResource('artist', $this->extendedCrudAbilities());
$this->registerResource('audio', $this->extendedCrudAbilities());
$this->registerResource('external resource', $this->extendedCrudAbilities());
$this->registerResource('image', $this->extendedCrudAbilities());
$this->registerResource('page', $this->extendedCrudAbilities());
$this->registerResource('series', $this->extendedCrudAbilities());
$this->registerResource('song', $this->extendedCrudAbilities());
$this->registerResource('studio', $this->extendedCrudAbilities());
$this->registerResource('video', $this->extendedCrudAbilities());
$this->registerResource('video script', $this->extendedCrudAbilities());
$this->registerResource(Anime::class, ExtendedCrudPermission::getInstances());
$this->registerResource(AnimeSynonym::class, ExtendedCrudPermission::getInstances());
$this->registerResource(AnimeTheme::class, ExtendedCrudPermission::getInstances());
$this->registerResource(AnimeThemeEntry::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Artist::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Audio::class, ExtendedCrudPermission::getInstances());
$this->registerResource(ExternalResource::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Image::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Page::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Series::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Song::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Studio::class, ExtendedCrudPermission::getInstances());
$this->registerResource(Video::class, ExtendedCrudPermission::getInstances());
$this->registerResource(VideoScript::class, ExtendedCrudPermission::getInstances());
// Special Permissions
$this->registerAbilities([
'view nova',
'view telescope',
'view horizon',
'bypass api rate limiter',
]);
}
/**
* Get CRUD abilities for resource.
*
* @return array<int, string>
*/
protected function crudAbilities(): array
{
return [
'view',
'create',
'update',
'delete',
];
}
/**
* Get extended CRUD abilities for soft-delete resource.
*
* @return array<int, string>
*/
protected function extendedCrudAbilities(): array
{
return array_merge(
$this->crudAbilities(),
[
'restore',
'force delete',
],
);
$this->registerAbilities(SpecialPermission::getValues());
}
/**
* Register resource abilities.
*
* @param string $resource
* @param array<int, string> $abilities
* @param CrudPermission[] $abilities
* @return void
*/
protected function registerResource(string $resource, array $abilities): void
{
foreach ($abilities as $ability) {
Permission::findOrCreate("$ability $resource");
Permission::findOrCreate($ability->format($resource));
}
}
+51 -41
View File
@@ -4,7 +4,33 @@ declare(strict_types=1);
namespace Database\Seeders\Auth\Role;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Auth\SpecialPermission;
use App\Models\Admin\Announcement;
use App\Models\Admin\Dump;
use App\Models\Admin\Setting;
use App\Models\Auth\Permission;
use App\Models\Auth\Role;
use App\Models\Auth\User;
use App\Models\Billing\Balance;
use App\Models\Billing\Transaction;
use App\Models\Document\Page;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Audio;
use App\Models\Wiki\ExternalResource;
use App\Models\Wiki\Image;
use App\Models\Wiki\Series;
use App\Models\Wiki\Song;
use App\Models\Wiki\Studio;
use App\Models\Wiki\Video;
use App\Models\Wiki\Video\VideoScript;
/**
* Class AdminSeeder.
@@ -22,56 +48,40 @@ class AdminSeeder extends RoleSeeder
$role = Role::findOrCreate('Admin');
// Admin Resources
$this->configureResource($role, 'announcement', $this->extendedCrudAbilities());
$this->configureResource($role, 'dump', $this->extendedCrudAbilities());
$this->configureResource($role, 'setting', $this->crudAbilities());
$this->configureResource($role, Announcement::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Dump::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Setting::class, CrudPermission::getInstances());
// Auth Resources
$this->configureResource($role, 'permission', ['view']);
$this->configureResource($role, 'role', $this->crudAbilities());
$this->configureResource($role, 'user', $this->extendedCrudAbilities());
$this->configureResource($role, Permission::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Role::class, CrudPermission::getInstances());
$this->configureResource($role, User::class, ExtendedCrudPermission::getInstances());
// Billing Resources
$this->configureResource($role, 'balance', $this->extendedCrudAbilities());
$this->configureResource($role, 'transaction', $this->extendedCrudAbilities());
$this->configureResource($role, Balance::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Transaction::class, ExtendedCrudPermission::getInstances());
// List Resources
$this->configureResource($role, 'playlist', $this->extendedCrudAbilities());
$this->configureResource($role, 'playlist track', $this->extendedCrudAbilities());
$this->configureResource($role, Playlist::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, PlaylistTrack::class, ExtendedCrudPermission::getInstances());
// Wiki Resources
$this->configureResource($role, 'anime', $this->extendedCrudAbilities());
$this->configureResource($role, 'anime synonym', $this->extendedCrudAbilities());
$this->configureResource($role, 'anime theme', $this->extendedCrudAbilities());
$this->configureResource($role, 'anime theme entry', $this->extendedCrudAbilities());
$this->configureResource($role, 'artist', $this->extendedCrudAbilities());
$this->configureResource($role, 'audio', $this->extendedCrudAbilities());
$this->configureResource($role, 'external resource', $this->extendedCrudAbilities());
$this->configureResource($role, 'image', $this->extendedCrudAbilities());
$this->configureResource($role, 'page', $this->extendedCrudAbilities());
$this->configureResource($role, 'series', $this->extendedCrudAbilities());
$this->configureResource($role, 'song', $this->extendedCrudAbilities());
$this->configureResource($role, 'studio', $this->extendedCrudAbilities());
$this->configureResource($role, 'video', $this->extendedCrudAbilities());
$this->configureResource($role, 'video script', $this->extendedCrudAbilities());
$this->configureResource($role, Anime::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, AnimeSynonym::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, AnimeTheme::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, AnimeThemeEntry::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Artist::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Audio::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, ExternalResource::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Image::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Page::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Series::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Song::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Studio::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, Video::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, VideoScript::class, ExtendedCrudPermission::getInstances());
// Special Permissions
$this->configureAbilities($role, ['view nova', 'view telescope', 'view horizon', 'bypass api rate limiter']);
}
/**
* Get extended CRUD abilities for soft-delete resource.
*
* @return array<int, string>
*/
protected function extendedCrudAbilities(): array
{
return array_merge(
$this->crudAbilities(),
[
'restore',
'force delete',
],
);
$this->configureAbilities($role, SpecialPermission::getValues());
}
}
@@ -0,0 +1,72 @@
<?php
declare(strict_types=1);
namespace Database\Seeders\Auth\Role;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\Role;
use App\Models\Document\Page;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Audio;
use App\Models\Wiki\ExternalResource;
use App\Models\Wiki\Image;
use App\Models\Wiki\Series;
use App\Models\Wiki\Song;
use App\Models\Wiki\Studio;
use App\Models\Wiki\Video;
use App\Models\Wiki\Video\VideoScript;
/**
* Class PatronRoleSeeder.
*/
class PatronRoleSeeder extends RoleSeeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run(): void
{
/** @var Role $role */
$role = Role::findOrCreate('Patron');
// List Resources
$this->configureResource($role, Playlist::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, PlaylistTrack::class, ExtendedCrudPermission::getInstances());
// Wiki Resources
$this->configureResource($role, Anime::class, [CrudPermission::VIEW()]);
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW()]);
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW()]);
$this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Artist::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Audio::class, [CrudPermission::VIEW()]);
$this->configureResource($role, ExternalResource::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Image::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Page::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Series::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Song::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Studio::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Video::class, [CrudPermission::VIEW()]);
$this->configureResource($role, VideoScript::class, [CrudPermission::VIEW()]);
// Special Permissions
$this->configureAbilities(
$role,
[
SpecialPermission::BYPASS_FEATURE_FLAGS,
SpecialPermission::VIEW_NOVA,
]
);
}
}
@@ -4,7 +4,10 @@ declare(strict_types=1);
namespace Database\Seeders\Auth\Role;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\Role;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
/**
* Class PlaylistUserRoleSeeder.
@@ -22,8 +25,8 @@ class PlaylistUserRoleSeeder extends RoleSeeder
$role = Role::findOrCreate('Playlist User');
// List Resources
$this->configureResource($role, 'playlist', $this->extendedCrudAbilities());
$this->configureResource($role, 'playlist track', $this->extendedCrudAbilities());
$this->configureResource($role, Playlist::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, PlaylistTrack::class, ExtendedCrudPermission::getInstances());
$role->default = true;
if ($role->isDirty()) {
+4 -32
View File
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Database\Seeders\Auth\Role;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\Permission;
use App\Models\Auth\Role;
use Illuminate\Database\Seeder;
@@ -25,6 +26,7 @@ class RoleSeeder extends Seeder
$this->call(WikiEditorRoleSeeder::class);
$this->call(WikiViewerRoleSeeder::class);
$this->call(PlaylistUserRoleSeeder::class);
$this->call(PatronRoleSeeder::class);
}
/**
@@ -32,12 +34,12 @@ class RoleSeeder extends Seeder
*
* @param Role $role
* @param string $resource
* @param array<int, string> $abilities
* @param CrudPermission[] $abilities
* @return void
*/
protected function configureResource(Role $role, string $resource, array $abilities): void
{
$permissions = Arr::map($abilities, fn (string $ability) => Permission::findByName("$ability $resource"));
$permissions = Arr::map($abilities, fn (CrudPermission $ability) => Permission::findByName($ability->format($resource)));
$role->givePermissionTo($permissions);
}
@@ -55,34 +57,4 @@ class RoleSeeder extends Seeder
$role->givePermissionTo($permissions);
}
/**
* Get CRUD abilities for resource.
*
* @return array<int, string>
*/
protected function crudAbilities(): array
{
return [
'view',
'create',
'update',
'delete',
];
}
/**
* Get extended CRUD abilities for soft-delete resource.
*
* @return array<int, string>
*/
protected function extendedCrudAbilities(): array
{
return array_merge(
$this->crudAbilities(),
[
'restore',
],
);
}
}
@@ -4,7 +4,27 @@ declare(strict_types=1);
namespace Database\Seeders\Auth\Role;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\Role;
use App\Models\Document\Page;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Audio;
use App\Models\Wiki\ExternalResource;
use App\Models\Wiki\Image;
use App\Models\Wiki\Series;
use App\Models\Wiki\Song;
use App\Models\Wiki\Studio;
use App\Models\Wiki\Video;
use App\Models\Wiki\Video\VideoScript;
use Illuminate\Support\Arr;
/**
* Class WikiEditorRoleSeeder.
@@ -21,27 +41,31 @@ class WikiEditorRoleSeeder extends RoleSeeder
/** @var Role $role */
$role = Role::findOrCreate('Wiki Editor');
$extendedCrudPermissions = ExtendedCrudPermission::getInstances();
// List Resources
$this->configureResource($role, 'playlist', $this->extendedCrudAbilities());
$this->configureResource($role, 'playlist track', $this->extendedCrudAbilities());
$this->configureResource($role, Playlist::class, $extendedCrudPermissions);
$this->configureResource($role, PlaylistTrack::class, $extendedCrudPermissions);
Arr::forget($extendedCrudPermissions, ExtendedCrudPermission::FORCE_DELETE()->key);
// Wiki Resources
$this->configureResource($role, 'anime', $this->extendedCrudAbilities());
$this->configureResource($role, 'anime synonym', $this->extendedCrudAbilities());
$this->configureResource($role, 'anime theme', $this->extendedCrudAbilities());
$this->configureResource($role, 'anime theme entry', $this->extendedCrudAbilities());
$this->configureResource($role, 'artist', $this->extendedCrudAbilities());
$this->configureResource($role, 'audio', ['view', 'update']);
$this->configureResource($role, 'external resource', $this->extendedCrudAbilities());
$this->configureResource($role, 'image', $this->extendedCrudAbilities());
$this->configureResource($role, 'page', $this->extendedCrudAbilities());
$this->configureResource($role, 'series', $this->extendedCrudAbilities());
$this->configureResource($role, 'song', $this->extendedCrudAbilities());
$this->configureResource($role, 'studio', $this->extendedCrudAbilities());
$this->configureResource($role, 'video', ['view', 'update']);
$this->configureResource($role, 'video script', ['view']);
$this->configureResource($role, Anime::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeSynonym::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeTheme::class, $extendedCrudPermissions);
$this->configureResource($role, AnimeThemeEntry::class, $extendedCrudPermissions);
$this->configureResource($role, Artist::class, $extendedCrudPermissions);
$this->configureResource($role, Audio::class, [CrudPermission::VIEW(), CrudPermission::UPDATE()]);
$this->configureResource($role, ExternalResource::class, $extendedCrudPermissions);
$this->configureResource($role, Image::class, $extendedCrudPermissions);
$this->configureResource($role, Page::class, $extendedCrudPermissions);
$this->configureResource($role, Series::class, $extendedCrudPermissions);
$this->configureResource($role, Song::class, $extendedCrudPermissions);
$this->configureResource($role, Studio::class, $extendedCrudPermissions);
$this->configureResource($role, Video::class, [CrudPermission::VIEW(), CrudPermission::UPDATE()]);
$this->configureResource($role, VideoScript::class, [CrudPermission::VIEW()]);
// Special Permissions
$this->configureAbilities($role, ['view nova']);
$this->configureAbilities($role, [SpecialPermission::VIEW_NOVA]);
}
}
@@ -4,7 +4,26 @@ declare(strict_types=1);
namespace Database\Seeders\Auth\Role;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Auth\SpecialPermission;
use App\Models\Auth\Role;
use App\Models\Document\Page;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeSynonym;
use App\Models\Wiki\Anime\AnimeTheme;
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Audio;
use App\Models\Wiki\ExternalResource;
use App\Models\Wiki\Image;
use App\Models\Wiki\Series;
use App\Models\Wiki\Song;
use App\Models\Wiki\Studio;
use App\Models\Wiki\Video;
use App\Models\Wiki\Video\VideoScript;
/**
* Class WikiViewerRoleSeeder.
@@ -22,26 +41,26 @@ class WikiViewerRoleSeeder extends RoleSeeder
$role = Role::findOrCreate('Wiki Viewer');
// List Resources
$this->configureResource($role, 'playlist', $this->extendedCrudAbilities());
$this->configureResource($role, 'playlist track', $this->extendedCrudAbilities());
$this->configureResource($role, Playlist::class, ExtendedCrudPermission::getInstances());
$this->configureResource($role, PlaylistTrack::class, ExtendedCrudPermission::getInstances());
// Wiki Resources
$this->configureResource($role, 'anime', ['view']);
$this->configureResource($role, 'anime synonym', ['view']);
$this->configureResource($role, 'anime theme', ['view']);
$this->configureResource($role, 'anime theme entry', ['view']);
$this->configureResource($role, 'artist', ['view']);
$this->configureResource($role, 'audio', ['view']);
$this->configureResource($role, 'external resource', ['view']);
$this->configureResource($role, 'image', ['view']);
$this->configureResource($role, 'page', ['view']);
$this->configureResource($role, 'series', ['view']);
$this->configureResource($role, 'song', ['view']);
$this->configureResource($role, 'studio', ['view']);
$this->configureResource($role, 'video', ['view']);
$this->configureResource($role, 'video script', ['view']);
$this->configureResource($role, Anime::class, [CrudPermission::VIEW()]);
$this->configureResource($role, AnimeSynonym::class, [CrudPermission::VIEW()]);
$this->configureResource($role, AnimeTheme::class, [CrudPermission::VIEW()]);
$this->configureResource($role, AnimeThemeEntry::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Artist::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Audio::class, [CrudPermission::VIEW()]);
$this->configureResource($role, ExternalResource::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Image::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Page::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Series::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Song::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Studio::class, [CrudPermission::VIEW()]);
$this->configureResource($role, Video::class, [CrudPermission::VIEW()]);
$this->configureResource($role, VideoScript::class, [CrudPermission::VIEW()]);
// Special Permissions
$this->configureAbilities($role, ['view nova']);
$this->configureAbilities($role, [SpecialPermission::VIEW_NOVA]);
}
}
+30
View File
@@ -6,12 +6,15 @@ namespace Tests\Feature\Http\Admin;
use App\Constants\Config\DumpConstants;
use App\Constants\Config\FlagConstants;
use App\Enums\Auth\SpecialPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\WithoutEvents;
use Illuminate\Http\Testing\File;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Storage;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
/**
@@ -39,6 +42,33 @@ class DumpTest extends TestCase
$response->assertForbidden();
}
/**
* Users with the bypass feature flag permission shall be permitted to download dumps
* even if the 'flags.allow_dump_downloading' property is disabled.
*
* @return void
*/
public function testVideoStreamingPermittedForBypass(): void
{
Config::set(FlagConstants::ALLOW_DUMP_DOWNLOADING_FLAG_QUALIFIED, $this->faker->boolean());
$fs = Storage::fake(Config::get(DumpConstants::DISK_QUALIFIED));
$file = File::fake()->create($this->faker->word().'.sql');
$fsFile = $fs->putFile('', $file);
$dump = Dump::factory()->createOne([
Dump::ATTRIBUTE_PATH => $fsFile,
]);
$user = User::factory()->withPermission(SpecialPermission::BYPASS_FEATURE_FLAGS)->createOne();
Sanctum::actingAs($user);
$response = $this->get(route('dump.show', ['dump' => $dump]));
$response->assertDownload($dump->path);
}
/**
* If the dump is soft-deleted, the user shall receive a not found exception.
*
@@ -8,7 +8,9 @@ use App\Actions\Storage\Admin\Dump\DumpDocumentAction;
use App\Actions\Storage\Admin\Dump\DumpWikiAction;
use App\Constants\Config\DumpConstants;
use App\Constants\Config\FlagConstants;
use App\Enums\Auth\SpecialPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\WithoutEvents;
use Illuminate\Http\Testing\File;
@@ -16,6 +18,7 @@ use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
/**
@@ -48,6 +51,52 @@ class LatestDocumentDumpTest extends TestCase
$response->assertForbidden();
}
/**
* Users with the bypass feature flag permission shall be permitted to download the latest document dump
* even if the 'flags.allow_dump_downloading' property is disabled.
*
* @return void
*/
public function testVideoStreamingPermittedForBypass(): void
{
Storage::fake('local');
$fs = Storage::fake(Config::get(DumpConstants::DISK_QUALIFIED));
Config::set(FlagConstants::ALLOW_DUMP_DOWNLOADING_FLAG_QUALIFIED, $this->faker->boolean());
Collection::times($this->faker->randomDigitNotNull(), function () {
$action = new DumpWikiAction();
$action->handle();
});
Collection::times($this->faker->randomDigitNotNull(), function () {
$action = new DumpDocumentAction();
$action->handle();
});
$path = Str::of(DumpDocumentAction::FILENAME_PREFIX)
->append($this->faker->word())
->append('.sql')
->__toString();
$file = File::fake()->create($path);
$fsFile = $fs->putFileAs('', $file, $path);
$dump = Dump::factory()->createOne([
Dump::ATTRIBUTE_PATH => $fsFile,
]);
$user = User::factory()->withPermission(SpecialPermission::BYPASS_FEATURE_FLAGS)->createOne();
Sanctum::actingAs($user);
$response = $this->get(route('dump.latest.document.show'));
$response->assertDownload($dump->path);
}
/**
* If no dumps exist, the user shall receive a not found error.
*
@@ -8,7 +8,9 @@ use App\Actions\Storage\Admin\Dump\DumpDocumentAction;
use App\Actions\Storage\Admin\Dump\DumpWikiAction;
use App\Constants\Config\DumpConstants;
use App\Constants\Config\FlagConstants;
use App\Enums\Auth\SpecialPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\WithoutEvents;
use Illuminate\Http\Testing\File;
@@ -16,6 +18,7 @@ use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;
/**
@@ -48,6 +51,52 @@ class LatestWikiDumpTest extends TestCase
$response->assertForbidden();
}
/**
* Users with the bypass feature flag permission shall be permitted to download the latest wiki dump
* even if the 'flags.allow_dump_downloading' property is disabled.
*
* @return void
*/
public function testVideoStreamingPermittedForBypass(): void
{
Storage::fake('local');
$fs = Storage::fake(Config::get(DumpConstants::DISK_QUALIFIED));
Config::set(FlagConstants::ALLOW_DUMP_DOWNLOADING_FLAG_QUALIFIED, $this->faker->boolean());
Collection::times($this->faker->randomDigitNotNull(), function () {
$action = new DumpDocumentAction();
$action->handle();
});
Collection::times($this->faker->randomDigitNotNull(), function () {
$action = new DumpWikiAction();
$action->handle();
});
$path = Str::of(DumpWikiAction::FILENAME_PREFIX)
->append($this->faker->word())
->append('.sql')
->__toString();
$file = File::fake()->create($path);
$fsFile = $fs->putFileAs('', $file, $path);
$dump = Dump::factory()->createOne([
Dump::ATTRIBUTE_PATH => $fsFile,
]);
$user = User::factory()->withPermission(SpecialPermission::BYPASS_FEATURE_FLAGS)->createOne();
Sanctum::actingAs($user);
$response = $this->get(route('dump.latest.wiki.show'));
$response->assertDownload($dump->path);
}
/**
* If no dumps exist, the user shall receive a not found error.
*
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Announcement;
use App\Enums\Auth\CrudPermission;
use App\Models\Admin\Announcement;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -60,7 +61,7 @@ class AnnouncementDestroyTest extends TestCase
$announcement->delete();
$user = User::factory()->withPermission('delete announcement')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -78,7 +79,7 @@ class AnnouncementDestroyTest extends TestCase
{
$announcement = Announcement::factory()->createOne();
$user = User::factory()->withPermission('delete announcement')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Announcement;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Admin\Announcement;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -58,7 +59,7 @@ class AnnouncementForceDeleteTest extends TestCase
{
$announcement = Announcement::factory()->createOne();
$user = User::factory()->withPermission('force delete announcement')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Announcement;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Admin\Announcement;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -62,7 +63,7 @@ class AnnouncementRestoreTest extends TestCase
{
$announcement = Announcement::factory()->createOne();
$user = User::factory()->withPermission('restore announcement')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -82,7 +83,7 @@ class AnnouncementRestoreTest extends TestCase
$announcement->delete();
$user = User::factory()->withPermission('restore announcement')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Announcement;
use App\Enums\Auth\CrudPermission;
use App\Models\Admin\Announcement;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -56,7 +57,7 @@ class AnnouncementStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermission('create announcement')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -76,7 +77,7 @@ class AnnouncementStoreTest extends TestCase
{
$parameters = Announcement::factory()->raw();
$user = User::factory()->withPermission('create announcement')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Announcement;
use App\Enums\Auth\CrudPermission;
use App\Models\Admin\Announcement;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -66,7 +67,7 @@ class AnnouncementUpdateTest extends TestCase
$parameters = Announcement::factory()->raw();
$user = User::factory()->withPermission('update announcement')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -86,7 +87,7 @@ class AnnouncementUpdateTest extends TestCase
$parameters = Announcement::factory()->raw();
$user = User::factory()->withPermission('update announcement')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Announcement::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Dump;
use App\Enums\Auth\CrudPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -60,7 +61,7 @@ class DumpDestroyTest extends TestCase
$dump->delete();
$user = User::factory()->withPermission('delete dump')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -78,7 +79,7 @@ class DumpDestroyTest extends TestCase
{
$dump = Dump::factory()->createOne();
$user = User::factory()->withPermission('delete dump')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Dump;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -58,7 +59,7 @@ class DumpForceDeleteTest extends TestCase
{
$dump = Dump::factory()->createOne();
$user = User::factory()->withPermission('force delete dump')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Dump;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -62,7 +63,7 @@ class DumpRestoreTest extends TestCase
{
$dump = Dump::factory()->createOne();
$user = User::factory()->withPermission('restore dump')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -82,7 +83,7 @@ class DumpRestoreTest extends TestCase
$dump->delete();
$user = User::factory()->withPermission('restore dump')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Dump;
use App\Enums\Auth\CrudPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -56,7 +57,7 @@ class DumpStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermission('create dump')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -76,7 +77,7 @@ class DumpStoreTest extends TestCase
{
$parameters = Dump::factory()->raw();
$user = User::factory()->withPermission('create dump')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Admin\Dump;
use App\Enums\Auth\CrudPermission;
use App\Models\Admin\Dump;
use App\Models\Auth\User;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -66,7 +67,7 @@ class DumpUpdateTest extends TestCase
$parameters = Dump::factory()->raw();
$user = User::factory()->withPermission('update dump')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -86,7 +87,7 @@ class DumpUpdateTest extends TestCase
$parameters = Dump::factory()->raw();
$user = User::factory()->withPermission('update dump')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Dump::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Auth\User\Me\List\Playlist;
use App\Enums\Auth\CrudPermission;
use App\Http\Api\Query\Query;
use App\Http\Resources\List\Collection\PlaylistCollection;
use App\Models\Auth\User;
@@ -65,7 +66,7 @@ class MyPlaylistIndexTest extends TestCase
->count($this->faker->randomDigitNotNull())
->create();
$user = User::factory()->withPermission('view playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(Playlist::class))->createOne();
$playlistCount = $this->faker->randomDigitNotNull();
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Balance;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Balance;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -60,7 +61,7 @@ class BalanceDestroyTest extends TestCase
$balance->delete();
$user = User::factory()->withPermission('delete balance')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -78,7 +79,7 @@ class BalanceDestroyTest extends TestCase
{
$balance = Balance::factory()->createOne();
$user = User::factory()->withPermission('delete balance')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Balance;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Balance;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -58,7 +59,7 @@ class BalanceForceDeleteTest extends TestCase
{
$balance = Balance::factory()->createOne();
$user = User::factory()->withPermission('force delete balance')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Balance;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Balance;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -62,7 +63,7 @@ class BalanceRestoreTest extends TestCase
{
$balance = Balance::factory()->createOne();
$user = User::factory()->withPermission('restore balance')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -82,7 +83,7 @@ class BalanceRestoreTest extends TestCase
$balance->delete();
$user = User::factory()->withPermission('restore balance')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Balance;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\Billing\BalanceFrequency;
use App\Enums\Models\Billing\Service;
use App\Models\Auth\User;
@@ -58,7 +59,7 @@ class BalanceStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermission('create balance')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class BalanceStoreTest extends TestCase
]
);
$user = User::factory()->withPermission('create balance')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Balance;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\Billing\BalanceFrequency;
use App\Enums\Models\Billing\Service;
use App\Models\Auth\User;
@@ -86,7 +87,7 @@ class BalanceUpdateTest extends TestCase
]
);
$user = User::factory()->withPermission('update balance')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -112,7 +113,7 @@ class BalanceUpdateTest extends TestCase
]
);
$user = User::factory()->withPermission('update balance')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Balance::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Transaction;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Transaction;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -60,7 +61,7 @@ class TransactionDestroyTest extends TestCase
$transaction->delete();
$user = User::factory()->withPermission('delete transaction')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -78,7 +79,7 @@ class TransactionDestroyTest extends TestCase
{
$transaction = Transaction::factory()->createOne();
$user = User::factory()->withPermission('delete transaction')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Transaction;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Transaction;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -58,7 +59,7 @@ class TransactionForceDeleteTest extends TestCase
{
$transaction = Transaction::factory()->createOne();
$user = User::factory()->withPermission('force delete transaction')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Transaction;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Billing\Transaction;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -62,7 +63,7 @@ class TransactionRestoreTest extends TestCase
{
$transaction = Transaction::factory()->createOne();
$user = User::factory()->withPermission('restore transaction')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -82,7 +83,7 @@ class TransactionRestoreTest extends TestCase
$transaction->delete();
$user = User::factory()->withPermission('restore transaction')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Transaction;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\Billing\Service;
use App\Models\Auth\User;
use App\Models\Billing\Transaction;
@@ -57,7 +58,7 @@ class TransactionStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermission('create transaction')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -83,7 +84,7 @@ class TransactionStoreTest extends TestCase
[Transaction::ATTRIBUTE_SERVICE => Service::getRandomInstance()->description]
);
$user = User::factory()->withPermission('create transaction')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Billing\Transaction;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\Billing\Service;
use App\Models\Auth\User;
use App\Models\Billing\Transaction;
@@ -76,7 +77,7 @@ class TransactionUpdateTest extends TestCase
[Transaction::ATTRIBUTE_SERVICE => Service::getRandomInstance()->description]
);
$user = User::factory()->withPermission('update transaction')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -99,7 +100,7 @@ class TransactionUpdateTest extends TestCase
[Transaction::ATTRIBUTE_SERVICE => Service::getRandomInstance()->description]
);
$user = User::factory()->withPermission('update transaction')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Transaction::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Document\Page;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Document\Page;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -60,7 +61,7 @@ class PageDestroyTest extends TestCase
$page->delete();
$user = User::factory()->withPermission('delete page')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -78,7 +79,7 @@ class PageDestroyTest extends TestCase
{
$page = Page::factory()->createOne();
$user = User::factory()->withPermission('delete page')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Document\Page;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Document\Page;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -58,7 +59,7 @@ class PageForceDeleteTest extends TestCase
{
$page = Page::factory()->createOne();
$user = User::factory()->withPermission('force delete page')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Document\Page;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\Document\Page;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -62,7 +63,7 @@ class PageRestoreTest extends TestCase
{
$page = Page::factory()->createOne();
$user = User::factory()->withPermission('restore page')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -82,7 +83,7 @@ class PageRestoreTest extends TestCase
$page->delete();
$user = User::factory()->withPermission('restore page')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Document\Page;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Document\Page;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -56,7 +57,7 @@ class PageStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermission('create page')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -78,7 +79,7 @@ class PageStoreTest extends TestCase
{
$parameters = Page::factory()->raw();
$user = User::factory()->withPermission('create page')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\Document\Page;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Document\Page;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -66,7 +67,7 @@ class PageUpdateTest extends TestCase
$parameters = Page::factory()->raw();
$user = User::factory()->withPermission('update page')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -86,7 +87,7 @@ class PageUpdateTest extends TestCase
$parameters = Page::factory()->raw();
$user = User::factory()->withPermission('update page')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Page::class))->createOne();
Sanctum::actingAs($user);
@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Http\Api\List\Playlist;
use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Auth\CrudPermission;
use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\List\PlaylistVisibility;
use App\Http\Api\Criteria\Paging\Criteria;
@@ -71,7 +72,7 @@ class BackwardIndexTest extends TestCase
Playlist::ATTRIBUTE_VISIBILITY => PlaylistVisibility::PRIVATE,
]);
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -87,7 +88,7 @@ class BackwardIndexTest extends TestCase
*/
public function testPrivatePlaylistTrackCanBeViewedByOwner(): void
{
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Http\Api\List\Playlist;
use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Auth\CrudPermission;
use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\List\PlaylistVisibility;
use App\Http\Api\Criteria\Paging\Criteria;
@@ -71,7 +72,7 @@ class ForwardIndexTest extends TestCase
Playlist::ATTRIBUTE_VISIBILITY => PlaylistVisibility::PRIVATE,
]);
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -87,7 +88,7 @@ class ForwardIndexTest extends TestCase
*/
public function testPrivatePlaylistTrackCanBeViewedByOwner(): void
{
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -60,7 +61,7 @@ class PlaylistDestroyTest extends TestCase
->for(User::factory())
->createOne();
$user = User::factory()->withPermission('delete playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -76,7 +77,7 @@ class PlaylistDestroyTest extends TestCase
*/
public function testTrashed(): void
{
$user = User::factory()->withPermission('delete playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Playlist::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -98,7 +99,7 @@ class PlaylistDestroyTest extends TestCase
*/
public function testDeleted(): void
{
$user = User::factory()->withPermission('delete playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(Playlist::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -58,7 +59,7 @@ class PlaylistForceDeleteTest extends TestCase
{
$playlist = Playlist::factory()->createOne();
$user = User::factory()->withPermission('force delete playlist')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use Illuminate\Foundation\Testing\WithoutEvents;
@@ -60,7 +61,7 @@ class PlaylistRestoreTest extends TestCase
->for(User::factory())
->createOne();
$user = User::factory()->withPermission('restore playlist')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -76,7 +77,7 @@ class PlaylistRestoreTest extends TestCase
*/
public function testTrashed(): void
{
$user = User::factory()->withPermission('restore playlist')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Playlist::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -96,7 +97,7 @@ class PlaylistRestoreTest extends TestCase
*/
public function testRestored(): void
{
$user = User::factory()->withPermission('restore playlist')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(Playlist::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Enums\Models\Wiki\ImageFacet;
use App\Http\Api\Field\Field;
@@ -63,7 +64,7 @@ class PlaylistShowTest extends TestCase
Playlist::ATTRIBUTE_VISIBILITY => PlaylistVisibility::PRIVATE,
]);
$user = User::factory()->withPermission('view playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -79,7 +80,7 @@ class PlaylistShowTest extends TestCase
*/
public function testPrivatePlaylistCanBeViewedByOwner(): void
{
$user = User::factory()->withPermission('view playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(Playlist::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -57,7 +58,7 @@ class PlaylistStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermission('create playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -81,7 +82,7 @@ class PlaylistStoreTest extends TestCase
[Playlist::ATTRIBUTE_VISIBILITY => PlaylistVisibility::getRandomInstance()->description],
);
$user = User::factory()->withPermission('create playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -77,7 +78,7 @@ class PlaylistUpdateTest extends TestCase
[Playlist::ATTRIBUTE_VISIBILITY => PlaylistVisibility::getRandomInstance()->description],
);
$user = User::factory()->withPermission('update playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -93,7 +94,7 @@ class PlaylistUpdateTest extends TestCase
*/
public function testTrashed(): void
{
$user = User::factory()->withPermission('update playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Playlist::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -132,7 +133,7 @@ class PlaylistUpdateTest extends TestCase
*/
public function testUpdate(): void
{
$user = User::factory()->withPermission('update playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(Playlist::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist\Track;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -68,7 +69,7 @@ class TrackDestroyTest extends TestCase
->for(Playlist::factory()->for(User::factory()))
->createOne();
$user = User::factory()->withPermission('delete playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -84,7 +85,7 @@ class TrackDestroyTest extends TestCase
*/
public function testScoped(): void
{
$user = User::factory()->withPermission('delete playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -111,7 +112,7 @@ class TrackDestroyTest extends TestCase
*/
public function testTrashed(): void
{
$user = User::factory()->withPermission('delete playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(PlaylistTrack::class))->createOne();
$track = PlaylistTrack::factory()
->for(Playlist::factory()->for($user))
@@ -133,7 +134,7 @@ class TrackDestroyTest extends TestCase
*/
public function testDeleted(): void
{
$user = User::factory()->withPermission('delete playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -168,7 +169,7 @@ class TrackDestroyTest extends TestCase
*/
public function testDestroyFirst(): void
{
$user = User::factory()->withPermission('delete playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -205,7 +206,7 @@ class TrackDestroyTest extends TestCase
*/
public function testDestroyLast(): void
{
$user = User::factory()->withPermission('delete playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -242,7 +243,7 @@ class TrackDestroyTest extends TestCase
*/
public function testDestroySecond(): void
{
$user = User::factory()->withPermission('delete playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist\Track;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -64,7 +65,7 @@ class TrackForceDeleteTest extends TestCase
*/
public function testScoped(): void
{
$user = User::factory()->withPermission('force delete playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -91,7 +92,7 @@ class TrackForceDeleteTest extends TestCase
*/
public function testDeleted(): void
{
$user = User::factory()->withPermission('force delete playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -122,7 +123,7 @@ class TrackForceDeleteTest extends TestCase
*/
public function testForceDeleteFirst(): void
{
$user = User::factory()->withPermission('force delete playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -155,7 +156,7 @@ class TrackForceDeleteTest extends TestCase
*/
public function testForceDeleteLast(): void
{
$user = User::factory()->withPermission('force delete playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -188,7 +189,7 @@ class TrackForceDeleteTest extends TestCase
*/
public function testForceDeleteSecond(): void
{
$user = User::factory()->withPermission('force delete playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::FORCE_DELETE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -6,6 +6,7 @@ namespace Tests\Feature\Http\Api\List\Playlist\Track;
use App\Concerns\Actions\Http\Api\SortsModels;
use App\Contracts\Http\Api\Field\SortableField;
use App\Enums\Auth\CrudPermission;
use App\Enums\Http\Api\Filter\TrashedStatus;
use App\Enums\Http\Api\Sort\Direction;
use App\Enums\Models\List\PlaylistVisibility;
@@ -77,7 +78,7 @@ class TrackIndexTest extends TestCase
Playlist::ATTRIBUTE_VISIBILITY => PlaylistVisibility::PRIVATE,
]);
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -93,7 +94,7 @@ class TrackIndexTest extends TestCase
*/
public function testPrivatePlaylistTrackCanBeViewedByOwner(): void
{
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,8 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist\Track;
use App\Enums\Auth\CrudPermission;
use App\Enums\Auth\ExtendedCrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -68,7 +70,7 @@ class TrackRestoreTest extends TestCase
->for(Playlist::factory()->for(User::factory()))
->createOne();
$user = User::factory()->withPermission('restore playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -84,7 +86,7 @@ class TrackRestoreTest extends TestCase
*/
public function testScoped(): void
{
$user = User::factory()->withPermission('restore playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -111,7 +113,7 @@ class TrackRestoreTest extends TestCase
*/
public function testTrashed(): void
{
$user = User::factory()->withPermission('restore playlist track')->createOne();
$user = User::factory()->withPermission(ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class))->createOne();
$track = PlaylistTrack::factory()
->for(Playlist::factory()->for($user))
@@ -131,7 +133,7 @@ class TrackRestoreTest extends TestCase
*/
public function testRestored(): void
{
$user = User::factory()->withPermissions(['delete playlist track', 'restore playlist track'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(PlaylistTrack::class), ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class)])->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -168,7 +170,7 @@ class TrackRestoreTest extends TestCase
*/
public function testRestoreFirst(): void
{
$user = User::factory()->withPermissions(['delete playlist track', 'restore playlist track'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(PlaylistTrack::class), ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class)])->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -212,7 +214,7 @@ class TrackRestoreTest extends TestCase
*/
public function testRestoreLast(): void
{
$user = User::factory()->withPermissions(['delete playlist track', 'restore playlist track'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(PlaylistTrack::class), ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class)])->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -251,7 +253,7 @@ class TrackRestoreTest extends TestCase
*/
public function testRestoreSecond(): void
{
$user = User::factory()->withPermissions(['delete playlist track', 'restore playlist track'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(PlaylistTrack::class), ExtendedCrudPermission::RESTORE()->format(PlaylistTrack::class)])->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist\Track;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Http\Api\Field\Field;
use App\Http\Api\Include\AllowedInclude;
@@ -68,7 +69,7 @@ class TrackShowTest extends TestCase
->for($playlist)
->createOne();
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -84,7 +85,7 @@ class TrackShowTest extends TestCase
*/
public function testPrivatePlaylistTrackCanBeViewedByOwner(): void
{
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -154,7 +155,7 @@ class TrackShowTest extends TestCase
*/
public function testScoped(): void
{
$user = User::factory()->withPermission('view playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist\Track;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use App\Models\List\Playlist\PlaylistTrack;
@@ -76,7 +77,7 @@ class TrackStoreTest extends TestCase
->for($playlist)
->makeOne();
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -92,7 +93,7 @@ class TrackStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -114,7 +115,7 @@ class TrackStoreTest extends TestCase
*/
public function testProhibitsNextAndPrevious(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -153,7 +154,7 @@ class TrackStoreTest extends TestCase
*/
public function testScopeNext(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -186,7 +187,7 @@ class TrackStoreTest extends TestCase
*/
public function testScopePrevious(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -219,7 +220,7 @@ class TrackStoreTest extends TestCase
*/
public function testCreate(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -252,7 +253,7 @@ class TrackStoreTest extends TestCase
*/
public function testCreateAfterLastTrack(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
@@ -298,7 +299,7 @@ class TrackStoreTest extends TestCase
*/
public function testCreateAfterFirstTrack(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
@@ -345,7 +346,7 @@ class TrackStoreTest extends TestCase
*/
public function testCreateBeforeLastTrack(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
@@ -392,7 +393,7 @@ class TrackStoreTest extends TestCase
*/
public function testCreateBeforeFirstTrack(): void
{
$user = User::factory()->withPermission('create playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::CREATE()->format(PlaylistTrack::class))->createOne();
$trackCount = $this->faker->numberBetween(2, 9);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Tests\Feature\Http\Api\List\Playlist\Track;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Models\Auth\User;
use App\Models\List\Playlist;
@@ -92,7 +93,7 @@ class TrackUpdateTest extends TestCase
[PlaylistTrack::ATTRIBUTE_VIDEO => Video::factory()->createOne()->getKey()],
);
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
Sanctum::actingAs($user);
@@ -108,7 +109,7 @@ class TrackUpdateTest extends TestCase
*/
public function testScoped(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -140,7 +141,7 @@ class TrackUpdateTest extends TestCase
*/
public function testScopePrevious(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -178,7 +179,7 @@ class TrackUpdateTest extends TestCase
*/
public function testPreviousIsNotSelf(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -212,7 +213,7 @@ class TrackUpdateTest extends TestCase
*/
public function testScopeNext(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -250,7 +251,7 @@ class TrackUpdateTest extends TestCase
*/
public function testNextIsNotSelf(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -284,7 +285,7 @@ class TrackUpdateTest extends TestCase
*/
public function testProhibitsNextAndPrevious(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -328,7 +329,7 @@ class TrackUpdateTest extends TestCase
*/
public function testTrashed(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -371,7 +372,7 @@ class TrackUpdateTest extends TestCase
*/
public function testUpdate(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -402,7 +403,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertFirstAfterSecond(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -448,7 +449,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertFirstAfterThird(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -494,7 +495,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertFirstBeforeThird(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -540,7 +541,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertSecondAfterThird(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -586,7 +587,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertSecondBeforeFirst(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -632,7 +633,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertThirdAfterFirst(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -678,7 +679,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertThirdBeforeSecond(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -724,7 +725,7 @@ class TrackUpdateTest extends TestCase
*/
public function testInsertThirdBeforeFirst(): void
{
$user = User::factory()->withPermission('update playlist track')->createOne();
$user = User::factory()->withPermission(CrudPermission::UPDATE()->format(PlaylistTrack::class))->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\List\PlaylistImage;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use App\Models\Wiki\Image;
@@ -69,7 +70,7 @@ class PlaylistImageDestroyTest extends TestCase
->for(Image::factory())
->createOne();
$user = User::factory()->withPermissions(['delete playlist', 'delete image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Playlist::class), CrudPermission::DELETE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -85,7 +86,7 @@ class PlaylistImageDestroyTest extends TestCase
*/
public function testNotFound(): void
{
$user = User::factory()->withPermissions(['delete playlist', 'delete image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Playlist::class), CrudPermission::DELETE()->format(Image::class)])->createOne();
$playlist = Playlist::factory()
->for($user)
@@ -106,7 +107,7 @@ class PlaylistImageDestroyTest extends TestCase
*/
public function testDeleted(): void
{
$user = User::factory()->withPermissions(['delete playlist', 'delete image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Playlist::class), CrudPermission::DELETE()->format(Image::class)])->createOne();
$playlistImage = PlaylistImage::factory()
->for(Playlist::factory()->for($user))
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\List\PlaylistImage;
use App\Enums\Auth\CrudPermission;
use App\Enums\Models\List\PlaylistVisibility;
use App\Enums\Models\Wiki\ImageFacet;
use App\Http\Api\Field\Field;
@@ -92,7 +93,7 @@ class PlaylistImageShowTest extends TestCase
->for(Image::factory())
->createOne();
$user = User::factory()->withPermission('view playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(Playlist::class))->createOne();
Sanctum::actingAs($user);
@@ -108,7 +109,7 @@ class PlaylistImageShowTest extends TestCase
*/
public function testPrivatePlaylistImageCanBeViewedByOwner(): void
{
$user = User::factory()->withPermission('view playlist')->createOne();
$user = User::factory()->withPermission(CrudPermission::VIEW()->format(Playlist::class))->createOne();
$playlistImage = PlaylistImage::factory()
->for(
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\List\PlaylistImage;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\List\Playlist;
use App\Models\Wiki\Image;
@@ -64,7 +65,7 @@ class PlaylistImageStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermissions(['create playlist', 'create image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Playlist::class), CrudPermission::CREATE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class PlaylistImageStoreTest extends TestCase
PlaylistImage::ATTRIBUTE_IMAGE => Image::factory()->createOne()->getKey(),
];
$user = User::factory()->withPermissions(['create playlist', 'create image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Playlist::class), CrudPermission::CREATE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeImage;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Image;
@@ -67,7 +68,7 @@ class AnimeImageDestroyTest extends TestCase
$anime = Anime::factory()->createOne();
$image = Image::factory()->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class AnimeImageDestroyTest extends TestCase
->for(Image::factory())
->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeImage;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Image;
@@ -64,7 +65,7 @@ class AnimeImageStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermissions(['create anime', 'create image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class AnimeImageStoreTest extends TestCase
AnimeImage::ATTRIBUTE_IMAGE => Image::factory()->createOne()->getKey(),
];
$user = User::factory()->withPermissions(['create anime', 'create image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeResource;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\ExternalResource;
@@ -67,7 +68,7 @@ class AnimeResourceDestroyTest extends TestCase
$anime = Anime::factory()->createOne();
$resource = ExternalResource::factory()->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete external resource'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(ExternalResource::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class AnimeResourceDestroyTest extends TestCase
->for(ExternalResource::factory(), AnimeResource::RELATION_RESOURCE)
->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete external resource'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(ExternalResource::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeResource;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\ExternalResource;
@@ -64,7 +65,7 @@ class AnimeResourceStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermissions(['create anime', 'create external resource'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(ExternalResource::class)])->createOne();
Sanctum::actingAs($user);
@@ -89,7 +90,7 @@ class AnimeResourceStoreTest extends TestCase
[AnimeResource::ATTRIBUTE_RESOURCE => ExternalResource::factory()->createOne()->getKey()],
);
$user = User::factory()->withPermissions(['create anime', 'create external resource'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(ExternalResource::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeResource;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\ExternalResource;
@@ -75,7 +76,7 @@ class AnimeResourceUpdateTest extends TestCase
$parameters = AnimeResource::factory()->raw();
$user = User::factory()->withPermissions(['update anime', 'update external resource'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::UPDATE()->format(Anime::class), CrudPermission::UPDATE()->format(ExternalResource::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeSeries;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Series;
@@ -67,7 +68,7 @@ class AnimeSeriesDestroyTest extends TestCase
$anime = Anime::factory()->createOne();
$series = Series::factory()->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete series'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(Series::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class AnimeSeriesDestroyTest extends TestCase
->for(Series::factory())
->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete series'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(Series::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeSeries;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Series;
@@ -64,7 +65,7 @@ class AnimeSeriesStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermissions(['create anime', 'create series'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(Series::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class AnimeSeriesStoreTest extends TestCase
AnimeSeries::ATTRIBUTE_SERIES => Series::factory()->createOne()->getKey(),
];
$user = User::factory()->withPermissions(['create anime', 'create series'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(Series::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeStudio;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Studio;
@@ -67,7 +68,7 @@ class AnimeStudioDestroyTest extends TestCase
$anime = Anime::factory()->createOne();
$studio = Studio::factory()->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete studio'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(Studio::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class AnimeStudioDestroyTest extends TestCase
->for(Studio::factory())
->createOne();
$user = User::factory()->withPermissions(['delete anime', 'delete studio'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Anime::class), CrudPermission::DELETE()->format(Studio::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeStudio;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Studio;
@@ -64,7 +65,7 @@ class AnimeStudioStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermissions(['create anime', 'create studio'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(Studio::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class AnimeStudioStoreTest extends TestCase
AnimeStudio::ATTRIBUTE_STUDIO => Studio::factory()->createOne()->getKey(),
];
$user = User::factory()->withPermissions(['create anime', 'create studio'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Anime::class), CrudPermission::CREATE()->format(Studio::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeThemeEntryVideo;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeTheme;
@@ -72,7 +73,7 @@ class AnimeThemeEntryVideoDestroyTest extends TestCase
$video = Video::factory()->createOne();
$user = User::factory()->withPermissions(['delete anime theme entry', 'delete video'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(AnimeThemeEntry::class), CrudPermission::DELETE()->format(Video::class)])->createOne();
Sanctum::actingAs($user);
@@ -93,7 +94,7 @@ class AnimeThemeEntryVideoDestroyTest extends TestCase
->for(Video::factory())
->createOne();
$user = User::factory()->withPermissions(['delete anime theme entry', 'delete video'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(AnimeThemeEntry::class), CrudPermission::DELETE()->format(Video::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\AnimeThemeEntryVideo;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Anime;
use App\Models\Wiki\Anime\AnimeTheme;
@@ -66,7 +67,7 @@ class AnimeThemeEntryVideoStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermissions(['create anime theme entry', 'create video'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(AnimeThemeEntry::class), CrudPermission::CREATE()->format(Video::class)])->createOne();
Sanctum::actingAs($user);
@@ -94,7 +95,7 @@ class AnimeThemeEntryVideoStoreTest extends TestCase
AnimeThemeEntryVideo::ATTRIBUTE_VIDEO => Video::factory()->createOne()->getKey(),
];
$user = User::factory()->withPermissions(['create anime theme entry', 'create video'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(AnimeThemeEntry::class), CrudPermission::CREATE()->format(Video::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\ArtistImage;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Image;
@@ -67,7 +68,7 @@ class ArtistImageDestroyTest extends TestCase
$artist = Artist::factory()->createOne();
$image = Image::factory()->createOne();
$user = User::factory()->withPermissions(['delete artist', 'delete image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Artist::class), CrudPermission::DELETE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class ArtistImageDestroyTest extends TestCase
->for(Image::factory())
->createOne();
$user = User::factory()->withPermissions(['delete artist', 'delete image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::DELETE()->format(Artist::class), CrudPermission::DELETE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Http\Api\Pivot\Wiki\ArtistImage;
use App\Enums\Auth\CrudPermission;
use App\Models\Auth\User;
use App\Models\Wiki\Artist;
use App\Models\Wiki\Image;
@@ -64,7 +65,7 @@ class ArtistImageStoreTest extends TestCase
*/
public function testRequiredFields(): void
{
$user = User::factory()->withPermissions(['create artist', 'create image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Artist::class), CrudPermission::CREATE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);
@@ -88,7 +89,7 @@ class ArtistImageStoreTest extends TestCase
ArtistImage::ATTRIBUTE_IMAGE => Image::factory()->createOne()->getKey(),
];
$user = User::factory()->withPermissions(['create artist', 'create image'])->createOne();
$user = User::factory()->withPermissions([CrudPermission::CREATE()->format(Artist::class), CrudPermission::CREATE()->format(Image::class)])->createOne();
Sanctum::actingAs($user);

Some files were not shown because too many files have changed in this diff Show More