diff --git a/app/admin/controller/mall/Goods.php b/app/admin/controller/mall/Goods.php index 0e7068d..3422c37 100644 --- a/app/admin/controller/mall/Goods.php +++ b/app/admin/controller/mall/Goods.php @@ -15,11 +15,8 @@ use think\response\Json; class Goods extends AdminController { - /** - * 过滤不需要生成的权限节点 默认 CURD 中会自动生成部分节点 可以在此处过滤 - * @var array[] - */ - protected array $ignoreNode = ['export']; + #[NodeAnnotation(ignore: ['export'])] // 过滤不需要生成的权限节点 默认 CURD 中会自动生成部分节点 可以在此处过滤 + protected array $ignoreNode; public function __construct(App $app) { diff --git a/app/admin/service/annotation/NodeAnnotation.php b/app/admin/service/annotation/NodeAnnotation.php index dada14a..a1b379a 100644 --- a/app/admin/service/annotation/NodeAnnotation.php +++ b/app/admin/service/annotation/NodeAnnotation.php @@ -2,13 +2,12 @@ namespace app\admin\service\annotation; -use Doctrine\Common\Annotations\Annotation\Attributes; use Attribute; /** * action 节点注解类 */ -#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_METHOD)] +#[Attribute(Attribute::IS_REPEATABLE | Attribute::TARGET_METHOD| Attribute::TARGET_PROPERTY)] final class NodeAnnotation { /** 过滤节点 */ diff --git a/app/admin/service/auth/Node.php b/app/admin/service/auth/Node.php index 7d4f690..dd82a6d 100644 --- a/app/admin/service/auth/Node.php +++ b/app/admin/service/auth/Node.php @@ -68,6 +68,14 @@ class Node // 遍历读取所有方法的注释的参数信息 foreach ($methods as $method) { + // 忽略掉不需要的节点 + $property = $reflectionClass->getProperty('ignoreNode'); + $propertyAttributes = $property->getAttributes(NodeAnnotation::class); + if (!empty($propertyAttributes[0])) { + $propertyAttribute = $propertyAttributes[0]->newInstance(); + if (in_array($method->name, $propertyAttribute->ignore)) continue; + } + $attributes = $reflectionClass->getMethod($method->name)->getAttributes(NodeAnnotation::class); foreach ($attributes as $attribute) { $annotation = $attribute->newInstance(); @@ -93,7 +101,7 @@ class Node 'type' => 1, ]; } - $nodeList = array_merge($nodeList, $actionList); + $nodeList = array_merge($nodeList, $actionList); } } diff --git a/app/common/controller/AdminController.php b/app/common/controller/AdminController.php index 9c4349b..99f826b 100644 --- a/app/common/controller/AdminController.php +++ b/app/common/controller/AdminController.php @@ -44,6 +44,12 @@ class AdminController extends BaseController 'title', ]; + /** + * 过滤节点更新 + * @var array + */ + protected array $ignoreNode = []; + /** * 不导出的字段信息 * @var array