Laravel 13 + Filament 5 admin panel and REST API for a non-profit developer collective, backed by the Pireon OAuth identity server. The public site is a separate, server-rendered application consuming /api/public/v1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
75 lines
2.6 KiB
PHP
75 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Providers;
|
|
|
|
use App\Models\Application;
|
|
use App\Models\Call;
|
|
use App\Models\Category;
|
|
use App\Models\Client;
|
|
use App\Models\Media;
|
|
use App\Models\Member;
|
|
use App\Models\MissingUrl;
|
|
use App\Models\Page;
|
|
use App\Models\Project;
|
|
use App\Models\Redirect;
|
|
use App\Models\Repository;
|
|
use App\Models\Service;
|
|
use App\Models\Talk;
|
|
use App\Models\Technology;
|
|
use App\Models\Testimonial;
|
|
use App\Models\User;
|
|
use App\Policies\ApplicationPolicy;
|
|
use App\Policies\CallPolicy;
|
|
use App\Policies\CategoryPolicy;
|
|
use App\Policies\ClientPolicy;
|
|
use App\Policies\MediaPolicy;
|
|
use App\Policies\MemberPolicy;
|
|
use App\Policies\MissingUrlPolicy;
|
|
use App\Policies\PagePolicy;
|
|
use App\Policies\ProjectPolicy;
|
|
use App\Policies\RedirectPolicy;
|
|
use App\Policies\RepositoryPolicy;
|
|
use App\Policies\RolePolicy;
|
|
use App\Policies\ServicePolicy;
|
|
use App\Policies\TalkPolicy;
|
|
use App\Policies\TechnologyPolicy;
|
|
use App\Policies\TestimonialPolicy;
|
|
use App\Policies\UserPolicy;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Illuminate\Support\ServiceProvider;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
class AuthServiceProvider extends ServiceProvider
|
|
{
|
|
public function boot(): void
|
|
{
|
|
Gate::policy(Page::class, PagePolicy::class);
|
|
Gate::policy(Category::class, CategoryPolicy::class);
|
|
Gate::policy(Project::class, ProjectPolicy::class);
|
|
Gate::policy(Member::class, MemberPolicy::class);
|
|
Gate::policy(Technology::class, TechnologyPolicy::class);
|
|
Gate::policy(Call::class, CallPolicy::class);
|
|
Gate::policy(Application::class, ApplicationPolicy::class);
|
|
Gate::policy(Service::class, ServicePolicy::class);
|
|
Gate::policy(Client::class, ClientPolicy::class);
|
|
Gate::policy(Testimonial::class, TestimonialPolicy::class);
|
|
Gate::policy(Talk::class, TalkPolicy::class);
|
|
Gate::policy(Media::class, MediaPolicy::class);
|
|
Gate::policy(Redirect::class, RedirectPolicy::class);
|
|
Gate::policy(MissingUrl::class, MissingUrlPolicy::class);
|
|
Gate::policy(Repository::class, RepositoryPolicy::class);
|
|
Gate::policy(User::class, UserPolicy::class);
|
|
Gate::policy(Role::class, RolePolicy::class);
|
|
|
|
// Super admins bypass every permission check. Granting the role this
|
|
// way rather than by attaching every permission means the role can
|
|
// never fall behind as the catalogue grows.
|
|
//
|
|
// Returning null (not false) when the role is absent is important: it
|
|
// lets the normal policy chain run instead of short-circuiting it.
|
|
Gate::before(fn (User $user, string $ability) => $user->hasRole('super_admin') ? true : null);
|
|
}
|
|
}
|