feat(auth): use attribute for ignore node

- Add NodeAnnotation attribute to filter ignore nodes
- Update Goods controller to use NodeAnnotation for ignore nodes
- Modify Node service to handle new attribute-Enhance AdminController with ignoreNode property
This commit is contained in:
wolfcode
2025-01-07 11:12:16 +08:00
parent 9d58da3cc3
commit 30c7615e53
4 changed files with 18 additions and 8 deletions

View File

@@ -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)
{

View File

@@ -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
{
/** 过滤节点 */

View File

@@ -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);
}
}

View File

@@ -44,6 +44,12 @@ class AdminController extends BaseController
'title',
];
/**
* 过滤节点更新
* @var array
*/
protected array $ignoreNode = [];
/**
* 不导出的字段信息
* @var array