dev-idkwhoami / cardinal
Requires
- filament/support: ^v3.2.81
Requires (Dev)
- laravel/pint: *
This package is not auto-updated.
Last update: 2024-10-03 05:21:23 UTC
README
一个简单的插件,通过安装即可提供租户、用户、权限和角色管理
此插件高度实验性,不建议在生产应用程序中使用。仍有大量配置是硬编码的,且尚未设置翻译
设置 & 配置
新 Laravel 安装(或自行承担风险)
遵循 Laravel 创建项目 指示
安装 Filament & Panel Builder
遵循 Filament 安装 指示
删除迁移
插件已经设置了以下迁移
- create_cache_table
- create_jobs_table
- create_tenants_table
- create_roles_table
- create_users_table
- create_tenant_user_table
- create_role_user_table
在新的项目中,这意味着您需要删除
users, cache, jobs迁移删除用户模型
插件提供了一个可立即使用的用户模型。因此,您可以删除默认的一个。
更新 auth 配置中的用户模型
Laravel 需要知道用户模型的位置,因此请在
config/auth.php文件中搜索此行'model' => env('AUTH_MODEL', App\Models\User::class),然后将用户模型类替换如下
'model' => env('AUTH_MODEL', \DevIdkwhoami\Cardinal\Models\User::class),创建 Filament 主题
使用以下命令为 cardinal 控面板创建主题
php artisan make:filament-theme cardinal-admin迁移数据库
使用以下命令迁移数据库
php artisan migreate:fresh可选地,将以下代码添加到您的数据库生成器中
CardinalPlugin::repository()->seed();以获取示例数据。
WIP:批量分配保护
目前,您必须执行
Model::unguard()才能正确地使用资源
如何使用
像往常一样准备您的 Filament 面板。然后通过 composer 引入插件
composer require dev-idkwhoami/cardinal
安装完成后,您可以使用 ->plugins() 函数将插件添加到面板中。
use DevIdkwhoami\Cardinal\CardinalPlugin;
use DevIdkwhoami\Cardinal\CardinalRepository;
CardinalPlugin::make(function (CardinalRepository $repository) {
$repository
/* Only models registered thorugh this function will be handled by the plugin */
->models([
Book::class,
])
->modelAbilities([
'users.delete' => fn (User $user, Model $model) => ! $model->is($user),
])
->permissions([
PermissionGroup::make('app', 'Application')
->weight(99)
->permissions([
Permission::make('access'),
]),
]);
})
->dontRunMigrations()
->cardinalPanelId("Something other than Cardinal")
->tenancy();
以下是一个配置为由插件处理的模型示例
class Book extends Model
{
/* BelongsToTenant ensures this model uses tenancy */
/* HasPermissions ensures this models abilities are registered and handled automatically */
use BelongsToTenant, HasFactory, HasPermissions, HasUlids, SoftDeletes;
protected $fillable = [
'title',
'description',
];
}
插件
CardinalPlugin 是插件的人口点。它为您提供了主要更改插件行为的函数。
功能
->dontRunMigrations() // prevents the plugin from running its migrations by itself
->cardinalPanelId("Something other than Cardinal") // sets the panel id of the internal CardinalPanel
->tenancy() // enables tenancy on the panel (make sure your models are prepared)
仓库
CardinalRepository 是一个对象,它保存了不同面板注册的所有信息。它为您提供了注册模型和权限的函数。
功能
->models([...]) // registers your models with the plugin
->modelAbilities([...]) // allows you to implement custom permission logic for "magic permissions"
->permissions([...]) // registers custom permissions with the plugin
权限组和权限
在面板上注册插件时,通常您不需要注册任何权限,如果模型使用 HasPermissions 特性,并将其添加到 ->models() 数组中。但如果出于任何原因需要注册额外的权限,您可以这样做
所有权限都需要一个权限组,要创建一个,请执行以下操作
use \DevIdkwhoami\Cardinal\Authorization\PermissionGroup;
PermissionGroup::make('extra')
->permissions([
// ...
])
make() 函数接受比仅仅组键更多的参数
- key 是权限组的唯一前缀
- name 用作
PermissionTabs表单块上的标签 - weight 用于在
PermissionTabs表单块上排序选项卡 - description 允许您向权限添加更多详细信息
use \DevIdkwhoami\Cardinal\Authorization\PermissionGroup;
PermissionGroup::make('extra', 'A Name For Displaying', 42, "A description for more information")
->permissions([
// ...
])
现在,要创建一个权限,您可以这样做
use \DevIdkwhoami\Cardinal\Authorization\PermissionGroup;
use \DevIdkwhoami\Cardinal\Authorization\Permission;
PermissionGroup::make('extra', 'A Name For Displaying', 42, "A description for more information")
->permissions([
Permission::make('supersecrect'),
])
这里的make()函数也接受与权限组相同的参数
特性
此插件使用特性来处理权限、租户等。
-
此特性为模型添加了
tenant()关系(请确保在迁移中添加了tenant_id列) -
具有此特性的模型将由权限系统自动处理,默认的纤维能力作为权限提供
-
具有此特性的模型可以持有权限(请确保在迁移中添加了
permissionsjson列) -
任何使用PermissionTabs表单块的页面都需要添加此特性,这确保权限被合并到
permissions列,并格式正确,包括将一个组的“所有权限”缩短为group.*
表单 & 表格块
此插件提供了一组预构建的块以供重复使用。
表单块
-
此块提供了一个部分或预配置的
Checkboxlist,用于授予对面板的访问权限。此组件期望在模型上有一个panelsjson列 -
此块提供了一个标签部分,用于授予通过插件注册的权限。此组件期望在模型上有一个
permissionsjson列 -
此块提供了一个部分或预配置的
Checkboxlist,用于授予角色。此组件期望在模型上有一个roles关系 -
此块提供了一个部分或预配置的
Checkboxlist,用于将用户分配给租户。此组件期望在模型上有一个tenants关系 -
此块提供了一个字段集或预配置的日期时间字段集,以显示模型的时间戳(
created_at, updated_at, deleted_at)的统一方式
表格块
-
此块提供了一个预配置的日期时间列集,以显示模型时间戳(
created_at, updated_at, deleted_at)的统一方式