Add user role management: introduce UserRole enum for role definitions, implement role-based access control in various resources and pages, and enhance authorization logic in the PanelProvider for improved security and user experience.
This commit is contained in:
@@ -20,6 +20,9 @@ use Illuminate\Routing\Middleware\SubstituteBindings;
|
||||
use Illuminate\Session\Middleware\AuthenticateSession;
|
||||
use Illuminate\Session\Middleware\StartSession;
|
||||
use Illuminate\View\Middleware\ShareErrorsFromSession;
|
||||
use App\Models\User;
|
||||
use App\Models\UserRole;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
|
||||
class PanelPanelProvider extends PanelProvider
|
||||
{
|
||||
@@ -30,6 +33,7 @@ class PanelPanelProvider extends PanelProvider
|
||||
->id('panel')
|
||||
->path('panel')
|
||||
->login()
|
||||
->profile()
|
||||
->colors([
|
||||
'primary' => Color::Amber,
|
||||
])
|
||||
@@ -73,4 +77,23 @@ class PanelPanelProvider extends PanelProvider
|
||||
ApplicationResource::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function boot(): void
|
||||
{
|
||||
Gate::before(function (User $user, string $ability) {
|
||||
return $user->role === UserRole::ADMIN ? true : null;
|
||||
});
|
||||
|
||||
Gate::define('view-activity-logs', function (User $user) {
|
||||
return $user->role === UserRole::ADMIN;
|
||||
});
|
||||
|
||||
Gate::define('manage-news-and-success', function (User $user) {
|
||||
return $user->role === UserRole::NEWS_WRITER || $user->role === UserRole::ADMIN || $user->role === UserRole::MANAGER;
|
||||
});
|
||||
|
||||
Gate::define('view-authors', function (User $user) {
|
||||
return $user->role === UserRole::NEWS_WRITER || $user->role === UserRole::ADMIN || $user->role === UserRole::MANAGER;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user