fastbolt / sonata-admin-protected-fields
为sonata admin提供保护字段简单功能
Requires
- php: ^8.0
- sonata-project/admin-bundle: ^4.9
Requires (Dev)
- fastbolt/test-helpers: ^0.1.2
- fig-r/psr2r-sniffer: ^1.3
- phpmd/phpmd: ^2.11
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.5
- psalm/plugin-phpunit: ^0.16.1
- slevomat/coding-standard: ^7.0
- spryker/code-sniffer: ^0.17.4
- squizlabs/php_codesniffer: ^3.6
- vimeo/psalm: ^4.22
- weirdan/doctrine-psalm-plugin: ^2.3
README
sonata admin的字段和实体保护
这个库旨在提供一个简单的方法来保护在sonata admin中编辑字段,同时仍然在表单中显示。
使用这个库,某些实体字段可能被固定,例如来自ERP或其他系统,而其他字段可能仍然可以被用户编辑。此外,在GUI中创建的项目可能仍然可编辑,包括所有在其他实例中不可编辑的字段。
此外,可以对这些实体进行相同的检查,以在每个项目的基础上保护实体不被sonata admin GUI删除。
该系统依赖于Fastbolt\SonataAdminProtectedFields\Protection\Checker\Checker
接口,该接口可以访问所有实体属性。
对于自定义实现,请参阅实现自定义检查器部分。
先决条件
由于使用PHP属性,我们至少需要PHP 8.0或更高版本。
目前,该捆绑包已在PHP 8.0、8.1和8.2以及sonata admin bundle版本4.9上进行测试。
安装
可以通过composer安装此库
composer require fastbolt/sonata-admin-protected-fields
配置
如果未自动配置,则需要在项目的bundles.php
文件中启用此捆绑包
<?php return [ Fastbolt\SonataAdminProtectedFields\SonataAdminProtectedFieldsBundle::class => ['all' => true], ];
使用
字段保护
要启用在sonata admin中编辑实体时的动态字段保护,只需将相应的属性添加到实体字段的属性中即可
<?php #[ORM\Column(type: 'string', length: 255)] #[SonataAdminProtectedFields\WriteProtected] private string $name = '';
默认属性保护使用Fastbolt\SonataAdminProtectedFields\Protection\Checker\PropertyProtectionChecker
服务执行,该服务通过捆绑包配置自动注册。
它期望您的实体实现一个返回布尔值的isProtected()
方法
public function isProtected(): bool { return $this->isProtected; }
删除保护
要启用动态删除保护,只需将相应的属性添加到实体类的头部即可
<?php #[ORM\Entity(repositoryClass: MaterialRepository::class)] #[SonataAdminProtectedFields\DeleteProtected] class Material
保护检查使用与字段保护部分中概述的相同机制。
实现自定义检查器
自定义检查器需要实现简单的Fastbolt\SonataAdminProtectedFields\Protection\Checker\Checker
接口
<?php use Fastbolt\SonataAdminProtectedFields\Protection\Checker\Checker; class MyChecker implements Checker { public function getName(): string { return 'my_checker'; } public function shouldBeProtected(object $item): bool { return true; } }
所有检查器都需要有DIC标签sonata_admin_protected_fields_checker
。有关DIC标签的更多信息,请参阅symfony文档。
services: App\MyChecker: tags: - 'sonata_admin_protected_fields.protection_checkers'
要启用自定义检查器,需要将getName
方法返回的值设置在属性中
<?php use Fastbolt\SonataAdminProtectedFields\Mapping\Attributes as SonataAdminProtectedFields; #[ORM\Entity(repositoryClass: App\Repository\MyEntityRepository::class)] #[SonataAdminProtectedFields\DeleteProtected(checker: 'my_checker')] class MyEntity { #[ORM\Column(type: 'string', length: 18)] #[SonataAdminProtectedFields\WriteProtected(checker: 'my_checker')] private string $myField = ''; }