跳到主要内容
版本:0.4.x(Latest)

基本介绍

源码插件通过services.Org()消费组织能力。组织能力是可选框架能力,官方提供方插件标识为linapro-org-core。当提供方不可用时,服务返回安全降级结果,调用方应通过Available()Status()判断是否展示组织相关功能。

动态插件可声明service: org调用已发布的只读组织方法。

能力阶段:运行期

类型支持:源码插件、动态插件

能力设计

SPI模式

Org能力采用SPI模式,具体组织逻辑由提供方插件实现。提供方通过orgcap.Provide(pluginID, factory)注册,宿主首次使用组织能力时才构造提供方,并传入ProviderEnv,其中包含插件ID、源码插件专属TenantFilter和用户视图能力。

提供方边界

orgcap.Provider包含组织插件需要实现的完整能力,包括部门视图、岗位视图、部门范围过滤、用户组织归属写入和工作台视图。普通Org()只暴露读取型消费面;涉及gdb.Model的数据范围、用户归属写入和工作台适配接口都留在宿主内部或提供方边界。

安全降级

能力可选,调用方必须处理组织能力不可用时的空结果或不可用状态。提供方是延迟构造的,宿主只在能力被使用时构造提供方,避免启动阶段强依赖可选插件。

接口定义

源码插件接口

方法说明
Available判断组织能力是否有可用提供方
Status返回能力状态、活跃提供方和冲突原因
ListUserDeptAssignments批量读取用户部门归属视图
GetUserDeptInfo读取单个用户部门标识和名称
GetUserDeptName读取单个用户部门名称
GetUserDeptIDs读取单个用户部门标识集合
GetUserPostIDs读取单个用户岗位标识集合

动态插件接口

动态方法说明
capability.available判断组织能力是否有可用提供方
capability.status返回能力状态和活跃提供方
users.dept_assignments.list批量读取用户部门归属视图
users.dept_info.get读取单个用户部门标识和名称
users.dept_name.get读取单个用户部门名称
users.dept_ids.get读取单个用户部门标识集合
users.post_ids.get读取单个用户岗位标识集合

能力使用

源码插件使用

源码插件通过services.Org()读取组织视图:

// 检查组织能力是否可用
if !services.Org().Available(ctx) {
// 降级处理
return
}

// 读取用户部门信息
deptInfo, err := services.Org().GetUserDeptInfo(ctx, userID)

// 批量读取用户部门归属
result, err := services.Org().ListUserDeptAssignments(ctx, userIDs)

// 读取用户岗位
postIDs, err := services.Org().GetUserPostIDs(ctx, userID)

动态插件使用

动态插件在plugin.yaml中声明org服务和授权方法:

hostServices:
- service: org
methods:
- capability.available
- users.dept_name.get
- users.post_ids.get

orgnone资源类型,不声明pathstableskeysresources。在动态插件侧使用:

orgSvc := pluginbridge.Default().Org()

// 检查组织能力是否可用
available := orgSvc.Available(ctx)

// 读取用户部门名称
deptName, err := orgSvc.GetUserDeptName(ctx, userID)

设计约束

  • 普通消费面只读。 插件不能通过Org()维护部门、岗位或用户组织归属。
  • 数据范围不对普通插件暴露。 组织数据范围需要数据库查询构建器,属于宿主内部ScopeService
  • 能力可选。 调用方必须处理组织能力不可用时的空结果或不可用状态。
  • 提供方是延迟构造。 宿主只在能力被使用时构造提供方,避免启动阶段强依赖可选插件。

相关服务