imean-service-engine-htmx-plugin 1.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@
7
7
  - [统一响应架构](#统一响应架构)
8
8
  - [模块系统](#模块系统)
9
9
  - [路由系统](#路由系统)
10
+ - [权限系统](#权限系统)
10
11
  - [组件系统](#组件系统)
11
12
  - [数据流](#数据流)
12
13
  - [响应处理流程](#响应处理流程)
@@ -32,10 +33,20 @@ HtmxAdminPlugin 采用后端驱动的统一响应架构,通过 `RouteHandler`
32
33
  │ │ │
33
34
  └───────────┼───────────┘
34
35
 
35
- ┌───────────▼───────────┐
36
- 响应处理系统
37
- (OOB Response Builder) │
38
- └───────────────────────┘
36
+ ┌───────────┼───────────┐
37
+
38
+ ┌───────▼──────┐ ┌─▼───────────▼──────────┐
39
+ │ 权限系统 │ │ 响应处理系统
40
+ │ (Auth & Perm)│ │ (OOB Response Builder) │
41
+ └───────┬──────┘ └────────────────────────┘
42
+
43
+ ┌───────▼─────────────────────────────────┐
44
+ │ utils/ │
45
+ │ - auth.ts (认证和权限校验) │
46
+ │ - operation.ts (操作ID生成) │
47
+ │ - permission-handler.tsx (权限拒绝处理) │
48
+ │ - permissions.ts (权限匹配) │
49
+ └──────────────────────────────────────────┘
39
50
  ```
40
51
 
41
52
  ## 核心设计原则
@@ -268,10 +279,11 @@ Custom 模块:
268
279
 
269
280
  ```
270
281
  1. RouteHandler.handle(ctx)
271
- └─> 获取用户信息(getUserInfo
282
+ └─> 获取用户信息(通过 AuthProvider.tokenToUser
272
283
  └─> 创建 HtmxAdminContext
273
284
  └─> 创建模块实例(new moduleClass())
274
285
  └─> 初始化模块实例(moduleInstance.__init(context))
286
+ └─> 权限校验(如果提供了 AuthProvider)
275
287
 
276
288
  2. 处理请求
277
289
  └─> 调用 moduleInstance.__handle()
@@ -531,11 +543,13 @@ this.context.sendSuccess("操作成功", "数据已保存");
531
543
  - 使用参数化查询
532
544
  - 防止 SQL 注入
533
545
 
534
- ### 2. 权限控制
546
+ ### 2. 认证和权限控制
535
547
 
536
- - 在数据源层面实现权限检查
537
- - 验证用户身份
538
- - 控制数据访问
548
+ - **认证**: 通过 `AuthProvider.tokenToUser` 从 Cookie 中获取用户信息
549
+ - **权限检查**: 基于操作ID进行细粒度权限控制
550
+ - **默认权限**: 模块可以声明所需权限,未声明则开放访问
551
+ - **权限匹配**: 支持通配符和禁止权限,提供灵活的权限管理
552
+ - **权限拒绝**: 局部请求使用弹框,整页请求重定向,避免干扰用户体验
539
553
 
540
554
  ### 3. 错误处理
541
555
 
@@ -547,18 +561,50 @@ this.context.sendSuccess("操作成功", "数据已保存");
547
561
 
548
562
  HtmxAdminPlugin 采用后端驱动的统一响应架构,通过 `RouteHandler` 统一处理所有请求。所有模块都通过 `__handle()` 方法作为统一入口,简化了请求处理流程。
549
563
 
550
- 核心设计原则:
564
+ ### 核心设计原则
565
+
551
566
  - **后端驱动**: 所有响应行为由后端控制,前端只负责触发请求
552
567
  - **统一处理**: 通过 `RouteHandler` 统一处理所有页面类型的请求
553
568
  - **上下文封装**: 通过 `HtmxAdminContext` 封装请求状态和操作
554
569
  - **类型安全**: 完整的 TypeScript 类型定义
555
570
  - **可扩展性**: 通过继承和重写实现扩展
571
+ - **权限控制**: 基于操作ID的细粒度权限管理,支持通配符和禁止权限
572
+
573
+ ### 核心架构特点
556
574
 
557
- 核心架构特点:
558
575
  - **模块初始化**: 通过 `__init(context)` 注入上下文,而不是选项对象
559
576
  - **统一入口**: `__handle()` 方法作为统一入口,`render()` 专注于渲染
560
577
  - **路径助手**: `PathHelper` 简化路径生成
561
578
  - **通知机制**: 统一的通知管理机制
579
+ - **权限系统**:
580
+ - 基于操作ID的权限检查
581
+ - 模块级别的权限声明
582
+ - 内置权限提示页面
583
+ - 支持局部请求弹框和整页重定向
584
+
585
+ ### 代码组织
586
+
587
+ 插件采用模块化的代码组织方式:
588
+
589
+ ```
590
+ src/
591
+ plugin.tsx # 插件主逻辑
592
+ handler.tsx # 请求处理流水线
593
+ base/ # 模块基类
594
+ base-page.ts # PageModule 基类
595
+ base-list.tsx # ListPageModule
596
+ base-detail.tsx # DetailPageModule
597
+ base-form.tsx # FormPageModule
598
+ components/ # UI 组件
599
+ utils/ # 工具函数
600
+ auth.ts # 认证和权限校验
601
+ operation.ts # 操作ID生成
602
+ permission-handler.tsx # 权限拒绝处理
603
+ permissions.ts # 权限匹配
604
+ context.tsx # 上下文对象
605
+ ...
606
+ types.ts # 类型定义
607
+ ```
562
608
 
563
609
  通过这些原则和架构,插件提供了一个灵活、易用、可扩展的管理后台解决方案。
564
610
 
@@ -3,6 +3,7 @@
3
3
  ## 目录
4
4
 
5
5
  - [插件配置](#插件配置)
6
+ - [认证和权限](#认证和权限)
6
7
  - [模块定义](#模块定义)
7
8
  - [数据源](#数据源)
8
9
  - [常用方法](#常用方法)
@@ -37,14 +38,17 @@ const adminPlugin = new HtmxAdminPlugin({
37
38
  icon: "👥",
38
39
  },
39
40
  ],
40
- getUserInfo: async (ctx) => ({
41
- name: "管理员",
42
- email: "admin@example.com",
43
- }),
44
- generateBreadcrumb: (currentPath, navItems) => [
45
- { label: "首页", href: "/admin" },
46
- { label: "当前页" },
47
- ],
41
+ authProvider: {
42
+ cookieKey: "auth_token",
43
+ async tokenToUser(token, ctx) {
44
+ const user = await getUserByToken(token);
45
+ return user ? {
46
+ name: user.name,
47
+ email: user.email,
48
+ permissions: user.permissions,
49
+ } : null;
50
+ },
51
+ },
48
52
  });
49
53
  ```
50
54
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imean-service-engine-htmx-plugin",
3
- "version": "1.0.1",
3
+ "version": "1.2.0",
4
4
  "description": "HtmxAdminPlugin for IMean Service Engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",