marshmallow / nova-user-groups
用于管理 Nova 用户组的包
Requires
- php: ^8.0
- illuminate/contracts: ^8.0|^9.0|^10.0
- laravel/nova: ^4.0
- marshmallow/nova-tabs: ^2.0
- spatie/laravel-package-tools: ^1.11.3
Requires (Dev)
- brianium/paratest: ^v6.4.4
- nunomaduro/collision: ^v6.2.0
- orchestra/testbench: ^v7.5.0|^8.0
- phpunit/phpunit: ^9.5.20
- spatie/laravel-ray: ^1.29.6
- vimeo/psalm: ^4.23.0
README
用于管理 Nova 用户组的包
安装
您可以通过 composer 安装此包
composer require marshmallow/nova-user-groups
您可以使用以下命令发布并运行迁移
php artisan vendor:publish --provider="Marshmallow\NovaUserGroups\NovaUserGroupsServiceProvider" --tag="nova-user-groups-migrations" php artisan migrate
使用方法
运行安装命令以开始使用此包。运行安装时,这将创建 Nova 资源,以便您管理 Nova 安装中的所有数据。它还将创建一个管理员用户组,并将所有当前 Nova 资源连接到该组。它还将连接所有现有用户到该管理员组。
php artisan user-groups:install php artisan user-groups:policies
要添加超级管理员组,请使用 -s 选项
php artisan user-groups:install -s
用户模型
将 HasUserGroup
特性添加到您的用户模型中。
namespace App\Models; use Marshmallow\NovaUserGroups\Traits\HasUserGroup; class User extends Authenticatable { use HasUserGroup; // ... }
Nova 资源
将 UserGroupResource
特性添加到您的主要 Nova 资源中。
namespace App\Nova; use Laravel\Nova\Resource as NovaResource; use Laravel\Nova\Http\Requests\NovaRequest; use Marshmallow\NovaUserGroups\Traits\UserGroupResource; abstract class Resource extends NovaResource { use UserGroupResource; // ... }
用户方法
您可以向用户模型添加方法并管理是否允许在 Nova 中运行这些方法。默认情况下,我们将向用户模型添加三个方法。这些是 viewNova()
、viewTelescope()
和 viewHorizon()
。如果您想添加新方法,需要遵循以下步骤。
在您的配置中添加您要添加的方法。
// config/nova-user-groups.php return [ 'user_methods' => [ // ... 'impersonate' => 'Is allowed to impersonate users', ], ];
接下来,您需要将方法添加到您的用户模型中。并调用 allowedToRunMethod
方法。
// app/models/user.php namespace App\Models; class User extends Authenticatable { /** * Please not that the methods must start with `may` and * then start with a capital letter. */ public function mayImpersonate() { return $this->allowedToRunMethod('impersonate'); } }
一旦设置完毕,前往 Nova 并编辑您的用户组。在方法部分,您现在将看到新的 impersonate
方法。选中此方法以激活该用户组的方法。
Nova 服务提供者
将 UserGroupNovaServiceProvider
特性添加到您的 NovaServiceProvider
。完成此操作后,您将有一些新方法来确保认证用户组可以执行在 Nova 服务提供者中定义的操作。
namespace App\Providers; // .. use Marshmallow\NovaUserGroups\Traits\UserGroupNovaServiceProvider; class NovaServiceProvider extends NovaApplicationServiceProvider { use UserGroupNovaServiceProvider; // ... protected function cards() { return $this->canSeeCards([ // Your cards go here. ]); } protected function dashboards() { return $this->canSeeDashboards([ // Your cards go here. ]); } protected function tools() { return $this->canSeeTools([ // Your cards go here. ]); } }
更改模型和资源
您可以通过在 AppServiceProvider
中的 boot
方法中更改它们来覆盖所有模型和资源。下面是一个示例。此示例中的值是默认值。
/** * Bootstrap any application services. * * @return void */ public function boot() { NovaUserGroups::$userModel = User::class; NovaUserGroups::$userGroupModel = \Marshmallow\NovaUserGroups\Models\UserGroup::class; NovaUserGroups::$novaResourceModel = \Marshmallow\NovaUserGroups\Models\NovaResource::class; NovaUserGroups::$novaResourceActionModel = \Marshmallow\NovaUserGroups\Models\NovaResourceAction::class; NovaUserGroups::$userResource = \App\Nova\User::class; NovaUserGroups::$novaResource = \Marshmallow\NovaUserGroups\Nova\NovaResource::class; NovaUserGroups::$novaResourceAction = \Marshmallow\NovaUserGroups\Nova\NovaResourceAction::class; }
配置
某些方法需要额外的策略访问权限,请在 'groups' 下添加一个具有键和名称的组。在 'methods' 下添加具有组键和方法名称的允许方法。
return [ /* |-------------------------------------------------------------------------- | Allowed Admin Groups |-------------------------------------------------------------------------- | | This is a list of groups on which the methods will be defined. | */ 'groups' => [ 'admin' => 'Administrator', 'super-admin' => 'SuperAdministrator', ], /* |-------------------------------------------------------------------------- | Allowed Methods |-------------------------------------------------------------------------- | | This is a list of allowed methods per group | */ 'methods' => [ 'admin' => [ 'viewNova', ], 'super-admin' => [ 'viewNova', 'viewTelescope', 'viewHorizon' ] ], ]; ## Commands ```bash php artisan user-groups:policies php artisan user-groups:policy {name} php artisan user-groups:import-resources php artisan marshmallow:resource NovaTool NovaUserGroups --force php artisan marshmallow:resource UserGroup NovaUserGroups --force php artisan marshmallow:resource NovaResource NovaUserGroups --force php artisan marshmallow:resource NovaResourceAction NovaUserGroups --force
测试
composer test
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请查阅我们的安全策略了解如何报告安全漏洞。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。