maheralmatari / shield
为 `spatie/laravel-permission` 提供的丝印支持。
Requires
- php: ^8.0|^8.1
- filament/filament: ^2.13
- illuminate/contracts: ^8.6|^9.0
- spatie/invade: ^1.0
- spatie/laravel-package-tools: ^1.9.2
- spatie/laravel-permission: ^5.0
Requires (Dev)
- barryvdh/laravel-ide-helper: ^2.12
- friendsofphp/php-cs-fixer: ^3.9
- nunomaduro/collision: ^5.0|^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^6.0|^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-10 06:06:28 UTC
README
Filament Shield
为 Filament Admin 添加访问管理的最简单、最直观的方式
- 🔥 资源
- 🔥 页面
- 🔥 小部件
- 🔥 自定义权限
升级
要升级到最新版本,首先运行
composer update
v2.x
注意 最小 Filament 要求现在是
2.13。
在继续之前,请先备份您的当前 config。
-
从
1.x升级- 从
App\Filament\Resources删除Shield文件夹 - 从
resources\lang\vendor or lang\vendor删除filament-shield - 从
resources\views\vendor删除filament-shield - 从
Config删除filament-shield.php - 现在可以遵循以下步骤进行
仅升级
- 从
-
仅升级
-
发布
Configphp artisan vendor:publish --tag=filament-shield-config --force
-
配置:根据您的
备份的配置更新新的已发布的配置 -
安装
php artisan shield:upgrade
-
注意 对于 2.13 之前的
Filament,请使用 v1.1.12
安装
- 通过 composer 安装该包
composer require MaherAlmatari/filament-shield
- 将
Spatie\Permission\Traits\HasRoles特性添加到您的用户模型中
use Illuminate\Foundation\Auth\User as Authenticatable; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { use HasRoles; //or HasFilamentShield // ... }
- 使用以下命令发布
config
php artisan vendor:publish --tag=filament-shield-config
- 设置配置
<?php return [ 'shield_resource' => [ 'slug' => 'shield/roles', 'navigation_sort' => -1, 'navigation_badge' => true ], 'auth_provider_model' => [ 'fqcn' => 'App\\Models\\User' ], 'super_admin' => [ 'enabled' => true, 'name' => 'super_admin' ], 'filament_user' => [ 'enabled' => true, 'name' => 'filament_user' ], 'permission_prefixes' => [ 'resource' => [ 'view', 'view_any', 'create', 'update', 'restore', 'restore_any', 'replicate', 'reorder', 'delete', 'delete_any', 'force_delete', 'force_delete_any', ], 'page' => 'page', 'widget' => 'widget', ], 'entities' => [ 'pages' => true, 'widgets' => true, 'resources' => true, 'custom_permissions' => false, ], 'generator' => [ 'option' => 'policies_and_permissions' ], 'exclude' => [ 'enabled' => true, 'pages' => [ 'Dashboard', ], 'widgets' => [ 'AccountWidget','FilamentInfoWidget', ], 'resources' => [], ], 'register_role_policy' => [ 'enabled' => false ], ];
- 现在运行以下命令来安装 shield
php artisan shield:install
按照提示操作并享受!
资源自定义权限
您可以通过配置文件添加 Resources 的自定义权限。
页面
如果您为 Pages 生成过权限,您可以切换侧边栏中页面的导航和受限访问。您可以手动设置此操作,但此包包含一个 HasPageShield 特性以加快此过程。您只需在页面中使用该特性即可。
<?php namespace App\Filament\Pages; use ...; use MaherAlmatari\FilamentShield\Traits\HasPageShield; class MyPage extends Page { use HasPageShield; ... }
📕 HasPageShield 使用 booted 方法检查用户的权限,并确保在父页存在的情况下执行 booted 页面方法。
页面钩子
但是,如果您需要在 booted 方法之前和之后执行某些方法,您可以在您的 Filament 页面中声明以下钩子方法。
<?php namespace App\Filament\Pages; use ...; use MaherAlmatari\FilamentShield\Traits\HasPageShield; class MyPage extends Page { use HasPageShield; ... protected function beforeBooted : void() { ... } protected function afterBooted : void() { ... } /** * Hook to perform an action before redirect if the user * doesn't have access to the page. * */ protected function beforeShieldRedirects : void() { ... } }
页面重定向路径
HasPageShield 默认使用 config('filament.path') 值进行 shield 重定向。如果您需要重写重定向路径,只需将以下方法添加到您的页面中。
<?php namespace App\Filament\Pages; use ...; use MaherAlmatari\FilamentShield\Traits\HasPageShield; class MyPage extends Page { use HasPageShield; ... protected function getShieldRedirectPath(): string { return '/'; // redirect to the root index... } }
小部件
如果您为 Widgets 生成过权限,您可以基于用户是否有权限切换它们的状态。您可以手动设置此操作,但此包包含一个 HasWidgetShield 特性以加快此过程。您只需在您的部件中使用该特性即可。
<?php namespace App\Filament\Widgets; use ...; use MaherAlmatari\FilamentShield\Traits\HasWidgetShield; class IncomeWidget extends LineChartWidget { use HasWidgetShield; ... }
角色策略
如果您已将 'register_role_policy' => true 设置在配置中,则可以跳过此步骤。为确保通过 RolePolicy 通过 RoleResource 访问,您需要将以下内容添加到您的 AuthServiceProvider 中。
//AuthServiceProvider.php ... protected $policies = [ 'Spatie\Permission\Models\Role' => 'App\Policies\RolePolicy', ]; ...
翻译
使用以下命令发布翻译
php artisan vendor:publish --tag="filament-shield-translations"
可用的 Filament Shield 命令
- install # One Command to Rule them All 🔥 - generate # (Re)Discovers Filament resources and (re)generates Permissions and Policies. - create # Create Permissions and/or Policy for the given Filament Resource Model - super-admin # Create a user with super_admin role - upgrade # upgrade shield
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
如果您想为此软件包做出贡献,您可能希望在真实的 Filament 项目中对其进行测试。
- 将此存储库分叉到您的 GitHub 账户。
- 在本地创建一个 Filament 应用。
- 在 Filament 应用根目录中克隆您的分叉。
- 在
/filament-shield目录下,为您的修复创建一个分支,例如fix/error-message。
在您的应用的 composer.json 中安装这些软件包。
"require": { "MaherAlmatari/filament-shield": "dev-fix/error-message as main-dev", }, "repositories": [ { "type": "path", "url": "filament-shield" } ]
现在,运行 composer update。
有关详细信息,请参阅 CONTRIBUTING。
安全漏洞
请查阅我们关于如何报告安全漏洞的 安全策略。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。